Php 双重预匹配登录验证

Php 双重预匹配登录验证,php,regex,preg-match,Php,Regex,Preg Match,我想验证用户名登录-它只能接受字母、数字和分数,最多20个符号,以下是我的正则表达式: 正则表达式:^[\w\u]{4,20}$ 它应该接受以下登录: login login_login _login _87login 837420 login898 但当登录仅包含下划线时,应返回false: ________ 如何在一个孕期内做到这一点?这是我的问题:)/^(?[a-z0-9-])+$/i 它接受由字母、数字、连字符和下划线组成的字符串,但不允许使用\uuuu。还要注意,这不会检查长度

我想验证用户名登录-它只能接受字母、数字和分数,最多20个符号,以下是我的正则表达式:

正则表达式:
^[\w\u]{4,20}$

它应该接受以下登录:

login
login_login
_login
_87login
837420
login898
但当登录仅包含下划线时,应返回false:

 ________
如何在一个孕期内做到这一点?这是我的问题:)

/^(?[a-z0-9-])+$/i


它接受由字母、数字、连字符和下划线组成的字符串,但不允许使用
\uuuu
。还要注意,这不会检查长度,您必须使用
strlen()
进行检查。它也不允许尾随下划线,但您的规范没有说明该下划线有效。

如果您只想检查是否至少有一个字母/数字,请使用:


猜对了!你能告诉我们有效用户名的标准是什么吗?(另外,
[\w\u]
\w
的意思相同)允许有多少下划线?另外,为什么在有
if(preg_-match('/\w{4,20}/',$user)和&!preg_-match('/{2,20}/',$user))的情况下会使事情复杂化呢{
?在编写正则表达式之前,您必须能够用英语描述您试图实现的规则。这似乎仍然允许在一行中使用多个下划线,只要字符串中也包含字母。引用我的回答:“如果您只想检查是否至少有一个字母/数字”.当然,它允许在一行中使用多个下划线,但由于规格不明确,我看不出这里有什么问题。
^(?=.*?[a-zA-Z0-9])\w{4,20}$