使用正则表达式验证用户名
Posted
技术标签:
【中文标题】使用正则表达式验证用户名【英文标题】:Validating userName using Regex 【发布时间】:2017-10-04 06:29:04 【问题描述】:用户名中唯一的数字必须在末尾。最后可以有零个或多个。
用户名字母可以是小写和大写。
用户名必须至少有两个字符长。两个字母的用户名只能使用字母字符。
我正在尝试这个,但我停滞不前了。 /\d+$\w+/gi
【问题讨论】:
根据经验,不要使用用户名,只需使用电子邮件和显示名称(他们可以为他们输入任何他们想要的名称)。没有人愿意为另一个站点维护另一个用户名。此外,对于用户名,您最终不得不单独报告每个验证失败(用户名太长,用户名需要大写,等等等等)。只是“用户名无效”是一个糟糕的用户体验。是什么使它无效?跳过它,使用电子邮件。 【参考方案1】:/^[a-z]2,\d*$/i
是:
^ : the begining
[a-z] : a character (a to z), you can add as many allowed characters as you want
2, : at least 2 of them
\d* : 0 or more digits
$ : the end
i : ignore case sensetivity (both lowercases and uppercases are allowed)
【讨论】:
【参考方案2】:用户名包含字符和数字,最少 2 个字符
/^[a-zA-Z]2,\d*$/i
测试结果:
UserNam9 = pass
9username = fail
Userna99 = pass
usernameeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee = pass
Us = pass
U = fail
【讨论】:
这个正则表达式是错误的,它有几个问题。首先,通过这种方式,您也可以在开头允许数字。然后 i 如果你指定 a-zA-Z 就没用了。如果你只使用 a-z 是有意义的。此外,通过这种方式,您也只接受两个数字。 什么?你是对的,[a-zA-Z]
是不必要的,不是错的,而是不必要的。但其余的都是对的……【参考方案3】:
/^[A-z]2,[A-z0-9]0,$/
/^ // start of line
[A-z]2, //alphabet characters 2 or more
[A-z0-9]0, //numbers and alphabet
$/ // end of line
【讨论】:
【参考方案4】:如果开头有一个字母,后跟 2 个或更多数字,则您错过了案例。
U99 = fail
d345 = fail
我的解决方案也通过了这些测试:
/^[a-z]2,\d*$|(?=\w3,)^[a-z]1,\d+$/i
使用正向前瞻,我确保在第二种情况下至少有 3 个字母数字字符。
【讨论】:
【参考方案5】:/^[a-z]2,\d*$|(?=\w3,)^[a-z]1,\d+$/i
的简化版:
/^\D(\d2,|\D+)\d*$/i
代码说明:
^
- 输入开始
\D
- 第一个字符是字母
\d2,
- 以两个或更多数字结尾
|
- 或
\D+
- 下一个或多个字母
\d*
- 以零个或多个数字结尾
$
- 输入结束
i
- 忽略输入的大小写
【讨论】:
【参考方案6】:这是我的答案,它通过了所有测试:
/^[a-z][a-z]+\d*$|^[a-z]\d2,$/i
第一部分:2 个字母(或更多)和零个或多个数字
或者
第二部分:1 个字母和 2 个或更多数字
【讨论】:
以上是关于使用正则表达式验证用户名的主要内容,如果未能解决你的问题,请参考以下文章