我目前正在尝试在提交注册表单时验证网站的用户名。
用户名的正则表达式为([^a-zA-Z0-9_]{5,25})
。我在PHP中使用了preg_match
用户名以及此正则表达式。
出于某种原因,空间通过未检测到。我已经尝试过如下的负向前瞻:(?![a-zA-Z0-9_]{5,25})
但仍然没有看。
有人有什么想法吗?
答案 0 :(得分:2)
[^...]
是一个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)char之前匹配。