正则表达式验证模式只允许一个字符
Regex validation pattern only allows one character
我正在尝试创建验证用户名、电子邮件和密码的函数,但我的正则表达式无法正常工作。我的用户名正则表达式是 ^[a-zA-Z0-9 _-]$
,当我输入任何内容时,它应该总是 returns false。
据我了解,开头和结尾的^
和$
意味着它确保整个字符串匹配这个正则表达式,a-z
和A-Z
允许所有字母,0-9
允许所有数字,最后三个字符(space、下划线和破折号)允许相应的字符。
为什么我的正则表达式计算不正确?
您需要一个量词,+
或 *
。正如所写,只允许字符 class.
中的 1 个字符
你的a-zA-Z0-9_
也可以换成\w
。尝试:
^[\w -]+$
+
需要 1 个或多个匹配项。 *
需要 0 个或更多匹配项,因此如果空字符串有效,请使用 *
.
此外,如果允许使用制表符,您可以使用 \h
代替 space 字符。那是水平 space 的元字符。我发现它比文字 space.
更容易阅读
根据评论,更新:
由于您希望字符串介于一定数量的字符之间,因此我们可以使用正则表达式获得更具体的信息。可以使用 {x,y}
创建一个范围,它将替换量词。
^[\w -]{3,30}$
此外,在 PHP 中,您必须在正则表达式的开头和结尾提供定界符。
preg_match("/^[\w -]{3,30}$/", $username);
此外,您应该启用错误报告,以便您将来获得这些有用的错误。参见
您没有指定字符数。让我们试试这个:
^[A-z0-9]*$
其中 [A-z0-9]
表示您可以使用任何字母数字字符,并且 区分大小写。
*
指定了多少个字符,在本例中是无限制的。如果您想将用户名长度限制在 10 个字符,则可以将其更改为:
^[A-z0-9]{10}$
其中 {10}
指定最多 10 个字符。
更新
还允许使用下划线、连字符和空格(字符串中的任何位置)- 使用以下内容:
^[A-z0-9 _-]{10}$
我正在尝试创建验证用户名、电子邮件和密码的函数,但我的正则表达式无法正常工作。我的用户名正则表达式是 ^[a-zA-Z0-9 _-]$
,当我输入任何内容时,它应该总是 returns false。
据我了解,开头和结尾的^
和$
意味着它确保整个字符串匹配这个正则表达式,a-z
和A-Z
允许所有字母,0-9
允许所有数字,最后三个字符(space、下划线和破折号)允许相应的字符。
为什么我的正则表达式计算不正确?
您需要一个量词,+
或 *
。正如所写,只允许字符 class.
你的a-zA-Z0-9_
也可以换成\w
。尝试:
^[\w -]+$
+
需要 1 个或多个匹配项。 *
需要 0 个或更多匹配项,因此如果空字符串有效,请使用 *
.
此外,如果允许使用制表符,您可以使用 \h
代替 space 字符。那是水平 space 的元字符。我发现它比文字 space.
根据评论,更新:
由于您希望字符串介于一定数量的字符之间,因此我们可以使用正则表达式获得更具体的信息。可以使用 {x,y}
创建一个范围,它将替换量词。
^[\w -]{3,30}$
此外,在 PHP 中,您必须在正则表达式的开头和结尾提供定界符。
preg_match("/^[\w -]{3,30}$/", $username);
此外,您应该启用错误报告,以便您将来获得这些有用的错误。参见
您没有指定字符数。让我们试试这个:
^[A-z0-9]*$
其中 [A-z0-9]
表示您可以使用任何字母数字字符,并且 区分大小写。
*
指定了多少个字符,在本例中是无限制的。如果您想将用户名长度限制在 10 个字符,则可以将其更改为:
^[A-z0-9]{10}$
其中 {10}
指定最多 10 个字符。
更新
还允许使用下划线、连字符和空格(字符串中的任何位置)- 使用以下内容:
^[A-z0-9 _-]{10}$