开发者

Regex for alphanumeric

开发者 https://www.devze.com 2022-12-21 08:23 出处:网络
开发者_如何学运维I\'ve this PHP regular expression: $username = preg_replace(\'/[^a-z0-9]/i\', \'\', $username);
开发者_如何学运维

I've this PHP regular expression:

$username = preg_replace('/[^a-z0-9]/i', '', $username);

It allows only A-Z and 0-9. How can I allow ., - and _ as well?


You can use the following regex:

/[^a-z0-9._-]/i
  • i at the end is to make the pattern matching case-insensitive. You can drop it and use: /[^a-zA-Z0-9._-]/
  • -(hyphen) has a special meaning in char class if its surrounded on both sided so we put it at the end so that its treated literally. You can also do: /[^a-z0-9.\-_]/ where we are escaping the hyphen
  • A dot in a char class is not a meta char hence will be treated literally and need not be escaped.


Easy, just add those characters to the regular expression as well

$username = preg_replace('/[^a-zA-Z0-9._-]/','',$username)

The . needs to be escaped because its the 'matchall' character, the - goes in the end because otherwise it would be used to define a range (we could ofcourse have just escaped it).


$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

Removes anything that isn't ([^]) one of the characters on the group. Note the hypern is the last one there, so it loses its special meaning.


If you know exactly what you need to match, just specify it in a character group. The dash either needs to be at the very start or very end.

/[A-Z0-9._-]/


$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

Your current code actually does allow both A-Z and a-z - the i flag marks your regular expression as case-insensitive.


$username = preg_replace('/[^a-z0-9._-]/i', '', $username);


Try

$username = preg_replace('/[^a-z0-9.-_]/i', '', $username);
0

精彩评论

暂无评论...
验证码 换一张
取 消