PHP 7.0-完整字符串的正则表达式不起作用

时间:2019-05-31 12:08:51

标签: php regex quantifiers

我正在尝试创建用于验证用户名,电子邮件和密码的函数,而我的正则表达式无法正常工作。我的用户名正则表达式为^[a-zA-Z0-9 _-]$,当我通过该操作时,它总是会返回false。

据我了解,^$的开头和结尾表示它确保整个字符串与该正则表达式a-z和{{1}匹配}允许所有字母,A-Z允许所有数字,最后三个字符(空格,下划线和破折号)允许各个字符。

为什么我的正则表达式计算不正确?

2 个答案:

答案 0 :(得分:2)

您需要一个量词+*。如前所述,字符类中只允许使用其中一个字符。

您的a-zA-Z0-9_也可以替换为\w。试试:

^[\w -]+$

+需要1个或更多匹配项。 *需要0个或多个匹配项,因此,如果有效的空字符串请使用*

此外,如果允许使用制表符,则可以使用\h代替空格字符。那是水平空间的元字符。我发现它比文字空间更容易阅读。

每条评论,更新:

因为看起来您希望字符串在一定数量的字符之间,所以使用正则表达式可以使其更加具体。可以使用{x,y}创建一个范围,该范围将取代量词。

^[\w -]{3,30}$

此外,在PHP中,您必须在正则表达式的开头和结尾处提供定界符。

preg_match("/^[\w -]{3,30}$/", $username);

此外,您应该启用错误报告,以便将来获得这些有用的错误。参见https://stackoverflow.com/a/21429652/3783243

答案 1 :(得分:2)

您没有指定字符数。让我们试试吧:

^[A-z0-9]*$

[A-z0-9]指出您可以使用任何字母数字字符,并且 区分大小写。

*指定了多少个字符,在这种情况下是无限的。如果您希望将用户名的长度最大为10个字符,则可以将其更改为:

^[A-z0-9]{10}$

由此{10}指定最多10个字符。

更新

还允许使用下划线,连字符和空格(在字符串中的任何位置)-使用以下内容:

^[A-z0-9 _-]{10}$