为什么这个正则表达式捕获空间?

问题描述:

我目前正在尝试验证注册表单提交网站的用户名。为什么这个正则表达式捕获空间?

用户名的正则表达式是([^a-zA-Z0-9_]{5,25})。我在这个正则表达式中使用PHP的用户名和preg_match

由于某些原因,空间通过未被发现。我已经尝试了如下的负向预测:(?![a-zA-Z0-9_]{5,25})但仍然没有看。

有没有人有任何想法?

+2

所以用户名不应该有'a-zA-Z0-9_',检查'^'的位置。验证你的正则表达式http://www.regexr.com/ – JustOnUnderMillions

+4

你可能的意思是:'^ [a-zA-Z0-9 _] {5,25} $' – anubhava

+0

谢谢你们俩!我的错。 –

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)字符。