tags:

views:

386

answers:

1

I have a simple regular expression to check a username:

preg_match('/(*UTF8)^[[:alnum:]]([[:alnum:]]|[ _.-])+$/i', $username);

In local testing (Windows 7 using WAMP), this will allow for usernames using UTF characters (such as é or ñ). However, when I move to test this on the server where the site will actually be hosted, I get the following warning:

Warning: preg_match() [function.preg-match]: Compilation failed: (*VERB) not recognized at offset 5 in /home/sites/vgmusic.com/test/Core/Impl/FormElementValidator.php on line 12

I have also tried this on a local Ubuntu installation and get the same error. In fact, I've only seen this work on my local development environment. Is there a way to allow for special characters that will work for all operating systems?

+4  A: 

Try it by describing the characters by its Unicode character properties:

preg_match('/^\p{L}[\p{L} _.-]+$/u', $username)
Gumbo
Looks good. I believe the following will also allow for numbers as the original example had:`preg_match('/^(\p{L}|\p{N})[(\p{L}|\p{N}) _.-]+$/u', $username)`
Secret Agent Man
@S. DePouw, make that `'/^[\p{L}\p{N}][\p{L}\p{N} _.-]+$/u'`. Inside a character class, `(`, `)` and `|` just match `(`, `)` and `|`.
Alan Moore