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

时间:2017-02-27 15:57:31

标签: php regex validation

我目前正在尝试在提交注册表单时验证网站的用户名。

用户名的正则表达式为([^a-zA-Z0-9_]{5,25})。我在PHP中使用了preg_match用户名以及此正则表达式。

出于某种原因,空间通过未检测到。我已经尝试过如下的负向前瞻:(?![a-zA-Z0-9_]{5,25})但仍然没有看。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

[^...]是一个negated character class,它匹配除类之外的所有char 。因此,[^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)char之前匹配。