Javascript Regex问题-用户名

Javascript Regex Issue - UserName

本文关键字:用户 问题 Regex Javascript      更新时间:2023-09-26

问题语句。

用户名应介于6到32个字母数字字符之间。空格是允许的,除非它是第一个或最后一个字符。不要将两个以上相同的字符组合在一起。允许使用以下特殊字符:@#$。用户名区分大小写

我们目前拥有的Regex是

(?!.*(.)'1{2})^[^'s]([0-9]*)([A-Za-z]+)('w|'@|'#|'$|'s|'-)*[^'s] 

在这些测试用例中运行良好

eldricdsouza
eldric1dsouza
eldric@dsouza
eldric#dsouza
eldric$dsouza
eldric dsouza
 eldric 
 eldricdsouza1
!eldric123#
eeeldric123#
eellldric123#
!user1405!
user@1405!
user@1405#$
user@1405###
user@1405###$
user@144405##$
user@14405##$

这些都不太好用。。。

5634user@14405##$ ---gave an error...when this is valid.
usereldric_   --- underscore is not valid
usereldric-dsouza  --- hyphen is not valid.
5634user@14405##$ ---gave an error...when this is valid.
usereldric_   --- underscore is not valid
usereldric-dsouza  --- hyphen is not valid.

或者这个。。。

UseerrNaame78 

您可以使用此模式使所有字符串中的相同字符不超过2个:

^(?=[a-zA-Z])(?:(['w@#$-]| (?!$))(?!.*'1.*'1)){6,32}$

但要想背靠背不超过2个相同的字符,可以使用:

^(?=[a-zA-Z])(?:(['w@#$-]| (?!$))(?!'1'1)){6,32}$

满足您需求的正则表达式是:

/^([a-zA-Z@#$])(?!'1)(?:([a-zA-Z@#$ ])(?!'2)){4,30}[a-zA-Z@#$]$/

演示:http://regex101.com/r/dS9kE2

一些解释:

  • (?!'1)-(或2)向前看,下一个字符与上一个匹配的字符不同
  • [a-zA-Z@#$]-第一个和最后一个位置的批准字符类别
  • [a-zA-Z@#$ ]-中间已批准字符的类别
  • {4,30}中间部分必须包含(6-2)到(32-2)个字符