为什么这个正则表达式捕获空间?
问题描述:
我目前正在尝试验证注册表单提交网站的用户名。为什么这个正则表达式捕获空间?
用户名的正则表达式是([^a-zA-Z0-9_]{5,25})
。我在这个正则表达式中使用PHP的用户名和preg_match
。
由于某些原因,空间通过未被发现。我已经尝试了如下的负向预测:(?![a-zA-Z0-9_]{5,25})
但仍然没有看。
有没有人有任何想法?
答
A [^...]
是negated character class,它与类中定义的以外的任何字符相匹配。因此,[^a-zA-Z0-9_]
匹配除字母数字或_
字符以外的任何字符。
要使用什么是积极字符类,[a-zA-Z0-9_]
,或\w
(不/u
修改,\w
相同字符相匹配),也锚。
所以,你可以使用
preg_match('~^\w{5,25}$~', $s)
或者
preg_match('~\A\w{5,25}\z~', $s)
的\z
锚字符串的末尾匹配,而$
(不/D
改性剂)也可以在一个换行符前匹配( LF)字符。
所以用户名不应该有'a-zA-Z0-9_',检查'^'的位置。验证你的正则表达式http://www.regexr.com/ – JustOnUnderMillions
你可能的意思是:'^ [a-zA-Z0-9 _] {5,25} $' – anubhava
谢谢你们俩!我的错。 –