如何编写限制点与下划线仅单次使用的用户名验证正则表达式
用户名验证正则表达式解决方案
需求明确
- 用户名总长度必须大于6个字符(即最少7位)
- 首字符只能是大小写英文字母
- 后续字符可使用:大小写字母、数字、
.、_ - 核心限制:
.和_各自最多仅能出现1次,不可重复
正确正则表达式
^(?=.{7,}$)(?![^.]*\.[^.]*\.)(?![^_]*_[^_]*_)[a-zA-Z][a-zA-Z0-9._]*$
表达式拆解
(?=.{7,}$):正向预查,确保用户名总长度至少7位(?![^.]*\.[^.]*\.):负向预查,限制.最多出现1次(避免连续或多个点)(?![^_]*_[^_]*_):负向预查,限制_最多出现1次(避免连续或多个下划线)[a-zA-Z][a-zA-Z0-9._]*:首字符为字母,后续为允许的合法字符组合
验证示例匹配结果
| 用户名 | 匹配结果 |
|---|---|
jamesbrianquinn | 匹配 |
james.brianquinn | 匹配 |
james.brian_quinn | 匹配 |
james.brian.quinn | 不匹配 |
james_brian_quinn | 不匹配 |
james.brian__quinn | 不匹配 |
原写法无效原因
你之前写的/^[a-zA-Z][a-zA-Z0-9.?_?]+$/g错误在于:字符集里的?只是普通字符,不是量词,无法起到限制.和_出现次数的作用,反而会允许用户名里出现?符号,完全不符合需求。
内容的提问来源于stack exchange,提问作者M.Khalkhali
相关产品推荐
相关产品推荐

