正则表达式验证模式只允许一个字符[重复]
Posted
技术标签:
【中文标题】正则表达式验证模式只允许一个字符[重复]【英文标题】:Regex validation pattern only allows one character [duplicate] 【发布时间】:2019-05-31 12:08:50 【问题描述】:我正在尝试创建用于验证用户名、电子邮件和密码的功能,但我的正则表达式无法正常工作。我的用户名正则表达式是^[a-zA-Z0-9 _-]$
,当我通过它应该可以正常工作时,它总是返回false。
据我了解,开头和结尾的^
和$
意味着它确保整个字符串与这个正则表达式匹配,a-z
和A-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$
【讨论】:
以上是关于正则表达式验证模式只允许一个字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章