如何在JavaScript中编写匹配指定用户名规则的regex正则表达式
你原有正则的问题
你写的/^[a-z]+\d*$/ig存在两处不符合规则的问题:
- 没有做长度为2的用户名的特殊限制,会把
a1、B2这类长度为2、末尾带数字的不符合规则的用户名判定为合法 - 没有限制最小长度,长度为1的单字母用户名会被判定为合法,不符合长度要求
注:你加的
g修饰符在校验单条用户名的场景下没有作用,完全可以移除。
正确正则写法
/^(?=.{2,})(?![a-zA-Z]\d$)[a-zA-Z]+\d*$/i
匹配规则说明
^、$分别匹配字符串的开头和结尾,避免前后出现多余的空字符或特殊字符(?=.{2,})正向先行断言,保证用户名总长度不低于2个字符(?![a-zA-Z]\d$)负向先行断言,直接排除「长度为2、第二个字符是数字」的非法场景,满足长度为2的用户名仅可使用字母的规则[a-zA-Z]+匹配1个及以上的大小写字母,保证首字符为字母、字母部分不存在数字穿插的情况\d*匹配0个及以上的数字,仅允许出现在所有字母之后的末尾位置i修饰符实现大小写不敏感匹配,符合字母支持大小写的要求
校验示例
- 合法用户名:
zhangsan、LiSi123、A3456、AB - 非法用户名:
123abc(数字开头)、a1(长度2带数字)、zhangsan123li(数字不在末尾)、a(长度不足2)、张_三(包含非字母数字字符)
内容的提问来源于stack exchange,提问作者uday
相关产品推荐
相关产品推荐

