Simple Username Creation Validation with PHP
When I create login areas (mostly intranets) for small websites, I'm always asked by the customer to keep
usernames to letters and numbers. That means no email addresses as usernames
and special characters like "_", "-", and ".". This, in my customer's mind,
keeps the login easy for their users and limits the number of support calls
they will receive. While I don't recommend disallowing common username
characters like the ones cited above, I do understand their need for simplicity.
Here's how, using PHP, I validate that a username is only letters and numbers.
The PHP
function validate_username($input,$pattern = '[^A-Za-z0-9]')
{
return !ereg($pattern,$input);
}
It's as easy as that. I don't go as far as using this for passwords, but you could if you wanted to. I'll also mention that if I want to allow non-alphanumeric characters, I just need to change the function's pattern. Easy enough!
![Facebook Open Graph META Tags]()
It's no secret that Facebook has become a major traffic driver for all types of websites. Nowadays even large corporations steer consumers toward their Facebook pages instead of the corporate websites directly. And of course there are Facebook "Like" and "Recommend" widgets on every website. One...
![Serving Fonts from CDN]()
For maximum performance, we all know we must put our assets on CDN (another domain). Along with those assets are custom web fonts. Unfortunately custom web fonts via CDN (or any cross-domain font request) don't work in Firefox or Internet Explorer (correctly so, by spec) though...
![Google Extension Effect with CSS or jQuery or MooTools JavaScript]()
Both of the two great browser vendors, Google and Mozilla, have Extensions pages that utilize simple but classy animation effects to enhance the page. One of the extensions used by Google is a basic margin-top animation to switch between two panes: a graphic pane...
![RealTime Stock Quotes with MooTools Request.Stocks and YQL]()
It goes without saying but MooTools' inheritance pattern allows for creation of small, simple classes that possess immense power. One example of that power is a class that inherits from Request, Request.JSON, and Request.JSONP: Request.Stocks. Created by Enrique Erne, this great MooTools class acts as...
I like the approach — instead of matching a word boundary e.g. ^[a-zA-z0-9]*$ you match the first invalid character. I wonder what the speed difference is…
BTW, you can use [^\w\d] insead ;) It’s lazier
My bad. You cant use \w since it matches _ as well. On the other hand \w handles \d, so if you are looking for something quick for chars, digits and _ — you can use \w.
You could also use PHP’s ctype_alnum to match only alphanumeric characters
which matches (ever so slightly) faster than its equivalent regular expression,
and still retain future flexibility by using something like:
function username($input, $pattern = false) { return ($pattern) ? !ereg($pattern, $input) : ctype_alnum($input); }Of course the speed difference is on the order of nanoseconds,
but it is faster nonetheless.
A better method name would be useful. ;)
@Jeff: Ooops. I have this function within a class. I actually use it like this:
if($valid->username($input)) { // move on... }I simply didn’t rename it for the blog. I’ll do that quick!
A word of warning,
eregis being removed in PHP6 because of the more powerful and usually fasterpreg. Altering your code to work withpregsis easy and safer should the server you’re on upgrade to PHP6 sometime in the future:function validate_username($input, $pattern = '/[^A-Za-z0-9]/') { return !preg_match($pattern, $input); }ereg will be deprecated in php 5.3 and removed in 6, use preg instead
ereg is not available in php 5.3.0
any alternative for this ?
I’m rather new to regexp, and am just trying to get something exactly like this to work, but it just isn’t. I got annoyed, and then simplified as much as possible to this:
and it isn’t responding anything except 0, no matter what I try.
Oops sorry. Anyways, it’s just a text input that posts to itself, and it deals with the post by doing
if(!is_null($_POST["f"])){ $input=$_POST["f"]; $pattern = '[^A-Za-z0-9]'; $a=preg_match($pattern,$input); echo $a; }The Best way I recommend is this :-
$str = ""; function validate_username($str) { $allowed = array(".", "-", "_"); // you can add here more value, you want to allow. if(ctype_alnum(str_replace($allowed, '', $str ))) { return $str; } else { $str = "Invalid Username"; return $str; } }