我一直试图为用户名reg_match
仅接受a-z
,A-Z
,0-9
,-
和{{1}不幸的是,我的所有尝试都失败了。
_
我的代码总是返回失败,谁能告诉我我做错了什么?
答案 0 :(得分:0)
问题是g
修饰符不适用于preg_match
;这就是preg_match_all
的用途。如果您启用了错误报告(请参阅How to get useful error messages in PHP?),您应该会看到以下问题的警告:
警告: preg_match()[function.preg-match]:第#行上的未知修饰符'g'
但是,如果你解决了这个问题,那么你的模式仍然会匹配任何包含单词字符或连字符的字符串。如果有其他无效字符,则无关紧。
尝试使用此模式
$re = '/^[\w-]+$/';
这将匹配字符串的开头,后跟一个或多个单词字符或连字符,后跟字符串的结尾。
另请注意,\w
的行为因区域设置而异,这意味着允许的用户名取决于服务器的配置。如果您真的只想匹配a-z
或0-9
,则无论语言环境如何,都应明确指定这些字符:
$re = '/^[a-z0-9_-]+$/i';
这里的i
标志使模式不区分大小写,这意味着它也允许使用大写字符。