验证用户名的正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证用户名的正则表达式相关的知识,希望对你有一定的参考价值。
参考技术A 1、不能有特殊字符和数字;2、可以输入英文,可以有空格,可以输入英文名字中的点;
3、可以输入汉字;
4、中文英文不能同时出现;
5、长度在1-20;
用于验证用户名的正则表达式 [重复]
【中文标题】用于验证用户名的正则表达式 [重复]【英文标题】:Regex for validating username [duplicate] 【发布时间】:2021-02-26 01:00:23 【问题描述】:我已经尝试了很多正则表达式模式,但我找不到一个完美的正则表达式,它可以执行以下操作(最少 3 个字符,最多 30 个字符,可以允许特殊字符,如果所有字符都只是特殊字符,它应该返回 false )。
期望:
-
"ben":true,(满足 3 个字符)
"ab":false,(不满足 3 个字符)
"ben franklin":true,(可以留空格)
"ben_franklin":true,(可以允许特殊字符)
"ben@:true,(满足特殊字符和最少 3 个字符)
"%#$":false,(虽然是 3char ,但都是特殊字符)
“本#franklin”:真,
"be'franklin":true
"&%^$@#!*&^":false
【问题讨论】:
我想如果你连续有 10 个特殊字符也是假的?"&%^$@#!*&^":false
?
@xdhmoore 是的,应该是假的
是否需要你只用一个正则表达式来解决它?如果将任务拆分为两个正则表达式,问题就会变得容易得多。首先列入白名单(检查它是否只有您想要的字符和所需长度)并接受它们,然后将它们列入黑名单(检查字符串是否仅包含特殊字符)并拒绝那些
@SamridhTuladhar 这也是我要建议的。
【参考方案1】:
如果“特殊字符”是指任何非字母数字字符,则可以使用以下模式:
^(?=.*[A-Za-z0-9]).3,30$
Demo.
细分:
^ # Beginning of the string.
(?=.*[A-Za-z0-9]) # Must contain at least one alphanumeric (English) character.
.3,30 # Match any character (special or not) between 3 and 30 times.
$ # End of string.
进一步调整:
如果您想在“非特殊字符”中添加更多字符,您可以在字符类中添加它们。例如,要添加空格字符,您可以使用[A-Za-z0-9 ]
。
如果您想将“特殊字符”限制为一组特定的字符,则可以将.3,30
替换为[A-Za-z0-9@#$%....]3,30
。
【讨论】:
【参考方案2】:我可能只需要 2 遍就可以做到这一点:
let str = "ben#franklin";
let result = !!(str.match(/^[a-z\s!@#$%^&_-]3,30$/g) && str.match(/^.*[a-z].*$/g));
console.log(result);
-
检查有效字符。
确保至少有一个 a-z 字符。
你没有提到数字或大写字符,所以我没有添加它们。
【讨论】:
以上是关于验证用户名的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章