我正在尝试创建用于验证用户名,电子邮件和密码的函数,而我的正则表达式无法正常工作。我的用户名正则表达式为^[a-zA-Z0-9 _-]$
,当我通过该操作时,它总是会返回false。
据我了解,^
和$
的开头和结尾表示它确保整个字符串与该正则表达式a-z
和{{1}匹配}允许所有字母,A-Z
允许所有数字,最后三个字符(空格,下划线和破折号)允许各个字符。
为什么我的正则表达式计算不正确?
答案 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}$