正则表达式验证模式只允许一个字符

Regex validation pattern only allows one character

我正在尝试创建验证用户名、电子邮件和密码的函数,但我的正则表达式无法正常工作。我的用户名正则表达式是 ^[a-zA-Z0-9 _-]$,当我输入任何内容时,它应该总是 returns false。

据我了解,开头和结尾的^$意味着它确保整个字符串匹配这个正则表达式,a-zA-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}$