使用正则表达式验证用户名

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 个或更多数字

【讨论】:

以上是关于使用正则表达式验证用户名的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式验证用户名

前端表单验证常用的15个JS正则表达式

使用正则表达式验证用户名

如何使用正则表达式验证密码?

js 正则验证正整数

最常用的15个前端表单验证JS正则表达式