我正在使用此正则表达式来验证我的应用程序的用户名。 3-20个字符,字母数字和下划线。不是以下划线开头或结尾,并且没有两个连续的下划线。
username.search(/^(?=.{3,20}$)(?![_])(?!.*[_]{2})[a-zA-Z0-9_]+(?<![_])$/)
但是在iOS /苹果浏览器上失败并出现以下错误:
SyntaxError:无效的正则表达式:无效的组说明符名称
如何使此正则表达式在所有主流浏览器中都能正常工作?
答案 0 :(得分:2)
您可以省略结尾处的负向查找,但也可以省略其他2个负向查找(?![_])(?!.*[_]{2})
,而仅在开头使用一个来检查长度3-20。
您可以匹配1次以上的[a-zA-Z0-9]
来代替2个负前瞻,以使字符串不能以下划线开头。
然后使用重复模式来匹配单个_
,然后再匹配1次以上[a-zA-Z0-9]
,以使字符串不能以下划线结尾。
^(?=.{3,20}$)[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)+$
请参见Regex demo
答案 1 :(得分:0)
根据我过去的经验,对Java中使用负向后看的支持并不很好。
您可以在can I use网站上看到浏览器一定不支持它。 Regex Pal网站也对此显示错误,建议不要使用它。
ps。我没有时间创建适合您的正则表达式。
答案 2 :(得分:0)
我猜测您可以简化并尝试使用类似于以下内容的表达式:
^(?![_])(?!.*[_]{2})[a-zA-Z0-9_]{2,19}[a-zA-Z0-9]$