我想写一个RegEx的用户名验证。用户名必须超过6个字符,并以字母(大写或小写)开头,但在下面,您可以使用字母,数字,点或下划线。重点是,使用点和下划线是可选的,但如果你决定使用它们,你有权只写一次,如果使用两次或更多次,那么用户名是错误的。举例来说:
jamesbrianquinn //ture
james.brianquinn //true
james.brian_quinn //true
james.brian.quinn //false
james_brian_quinn //false
james.brian__quinn //false
字符串
点和下划线的位置并不重要。唯一重要的是它们不应该是用户名的第一个字母或重复多次。
我尝试使用“?“,但对我来说不起作用:
/^[a-zA-Z][a-zA-Z0-9.?_?]+$/g
型
那么,什么是正确的RegEx???
2条答案
按热度按时间fcipmucu1#
您可以使用负的lookaheads来强制最多使用一个点或下划线:
字符串
这个模式表示匹配:
^
用户名的开头(?!.*\..*\.)
Assert不出现两个点(=最多一个点)(?!.*_.*_)
Assert不出现两个下划线(=最多一个_
)[A-Za-z]
第一个字符是字母[A-Za-z0-9._]{5,}
以下五个或更多有效字符6ioyuze22#
使用一个先行、一个后向引用和一个不区分大小写的标志
/i
字符串
模式匹配:
^
字符串开头[A-Z]
匹配单个字符A-Z(?!.*([._]).*\1)
负先行,使用捕获组([._])
内的字符类Assert.
或_
不超过2次,并使用反向引用匹配表示为\1
的相同字符[\w.]{5,}
匹配5次或更多次单词char或.
$
字符串结束Regex demo
型