正则表达式验证模式只允许一个字符[重复]

Posted

技术标签:

【中文标题】正则表达式验证模式只允许一个字符[重复]【英文标题】:Regex validation pattern only allows one character [duplicate] 【发布时间】:2019-05-31 12:08:50 【问题描述】:

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

据我了解,开头和结尾的^$ 意味着它确保整个字符串与这个正则表达式匹配,a-zA-Z 允许所有字母,0-9允许所有数字,最后三个字符(空格、下划线和破折号)允许各自的字符。

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

【问题讨论】:

您真的希望电子邮件地址为 1 个字符吗?你试过^[a-zA-Z0-9 _-]+$这样的东西吗? 【参考方案1】:

您需要一个量词,+*。正如它所写的那样,只允许字符类中的 1 个字符。

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

^[\w -]+$

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

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

每条评论,更新:

由于您希望字符串介于一定数量的字符之间,因此我们可以使用正则表达式获得更具体的信息。可以使用 x,y 创建一个范围,它将替换量词。

^[\w -]3,30$

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

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

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

【讨论】:

那还是不行。这是我的代码:``` function valid_username(string $username) $username_length = strlen($username); return ($username_length >= 3 && $username_length 字符串(4)“测试”【参考方案2】:

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

^[A-z0-9]*$

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

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

^[A-z0-9]10$

10 指定最多 10 个字符。

更新

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

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

【讨论】:

以上是关于正则表达式验证模式只允许一个字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于验证特定模式的正则表达式

用于密码验证的正则表达式,仅特定字符 [重复]

正则表达式:允许除某些选定字符之外的所有内容[重复]

密码验证Objective-C的正则表达式[重复]

js 用正则表达式验证只允许输入数字,或者是数字后两位小数点,如何写?

正则表达式只允许单词之间有一个空格