Php 用于验证用户名的正则表达式无效

Php 用于验证用户名的正则表达式无效,php,regex,Php,Regex,我有一个正则表达式: /^[A-z0-9\._-]{3,24}+$/i /^[\w.-]{3,24}$/ 这应该只匹配长度在3到24个字符之间的字符串,并且只匹配字符a-z、a-z、0-9,然后匹配和-字符 问题是,这也会匹配字符串,如“^^”。有人刚刚创建了一个用户名,所以这绝对是个问题!有人能发现我的正则表达式的问题吗?使用此正则表达式: /^[A-z0-9\._-]{3,24}+$/i /^[\w.-]{3,24}$/ A-z与[A-Za-z]不同,因为它还包括其他字符,如^(谢谢

我有一个正则表达式:

/^[A-z0-9\._-]{3,24}+$/i
/^[\w.-]{3,24}$/
这应该只匹配长度在3到24个字符之间的字符串,并且只匹配字符a-z、a-z、0-9,然后匹配和-字符

问题是,这也会匹配字符串,如“^^”。有人刚刚创建了一个用户名,所以这绝对是个问题!有人能发现我的正则表达式的问题吗?

使用此正则表达式:

/^[A-z0-9\._-]{3,24}+$/i
/^[\w.-]{3,24}$/
A-z
[A-Za-z]
不同,因为它还包括其他字符,如
^
(谢谢杰克)

同时删除
{3,24}
之后的额外量词
+
,这意味着整个字符串的一个或多个实例

PS:我还缩短了您的正则表达式,以使用
\w
而不是
[A-Za-z0-9.]
使用此正则表达式:

/^[A-z0-9\._-]{3,24}+$/i
/^[\w.-]{3,24}$/
A-z
[A-Za-z]
不同,因为它还包括其他字符,如
^
(谢谢杰克)

同时删除
{3,24}
之后的额外量词
+
,这意味着整个字符串的一个或多个实例


PS:我还缩短了您的正则表达式,使用
\w
而不是
[A-Za-z0-9\

您不需要
+
,因为您正在使用
{3,24}
指定长度范围

/^[A-z0-9\._-]{3,24}$/i

正如下面的评论所指出的,
A-z
也与^字符匹配。在这种情况下,
A-Za-z
会更好;但是,上面用
\w.-
给出的答案是迄今为止最优雅的。

您不需要
+
,因为您正在用
{3,24}
指定长度范围

/^[A-z0-9\._-]{3,24}$/i

正如下面的评论所指出的,
A-z
也与^字符匹配。在这种情况下,
A-Za-z
会更好;然而,上面用
\w.-
给出的答案是迄今为止最优雅的。

太棒了。好简单!谢谢我必须再等几分钟才能接受答案。事实上,
+
没有不良影响(即使它不应该在那里)。你所谓的缩短正则表达式的“伪装”实际上就是修复,因为
A-z
范围包括
^
:)@Jack:谢谢,我忽略了这一部分,在我的回答中添加了。哇,我以为A-z是A-z和A-z。A-z中是否包含所有特殊字符?
A-z
包含ASCII表格中65到122范围内的所有字符。好简单!谢谢我必须再等几分钟才能接受答案。事实上,
+
没有不良影响(即使它不应该在那里)。你所谓的缩短正则表达式的“伪装”实际上就是修复,因为
A-z
范围包括
^
:)@Jack:谢谢,我忽略了这一部分,在我的回答中添加了。哇,我以为A-z是A-z和A-z。A-z中是否包含所有特殊字符?
A-z
包含ASCII表格中65到122范围内的所有字符根据,您的模式有语法错误;奇怪的是为什么PCRE似乎不关心它;奇怪的是为什么PCRE似乎不关心它。这仍然匹配
“^^”
。你是对的,我不应该在这种情况下使用A-z,而是A-Za-z。但是,坦白地说,我认为“AUBHAVA的答案无论如何都更优雅。这仍然匹配<代码> ^ ^”/代码>。你是对的,在这种情况下,我不应该使用A-Z,而不是A ZA Z。但是坦白地说,我认为阿努巴哈娃的回答更优雅。