Javascript 如何使此regex safari/iOS兼容?
我正在使用此正则表达式验证我的应用程序的用户名。3-20个字符、字母数字和下划线。不以下划线开头或结尾,并且没有两个连续的下划线Javascript 如何使此regex safari/iOS兼容?,javascript,regex,typescript,safari,Javascript,Regex,Typescript,Safari,我正在使用此正则表达式验证我的应用程序的用户名。3-20个字符、字母数字和下划线。不以下划线开头或结尾,并且没有两个连续的下划线 username.search(/^(?=.{3,20}$)(?![!])(?!.[!]{2})[a-zA-Z0-9!]+( 但在iOS/safari上失败,出现以下错误: SyntaxError:无效的正则表达式:无效的组说明符名称 如何使这个正则表达式在所有主要浏览器中都能工作?根据我过去的经验,在Javascript中使用反向查找并没有得到很好的支持 你可以在网
username.search(/^(?=.{3,20}$)(?![!])(?!.[!]{2})[a-zA-Z0-9!]+(
但在iOS/safari上失败,出现以下错误:
SyntaxError:无效的正则表达式:无效的组说明符名称
如何使这个正则表达式在所有主要浏览器中都能工作?根据我过去的经验,在Javascript中使用反向查找并没有得到很好的支持
你可以在网站中看到浏览器不支持它。网站也显示了一个错误,建议不要使用它
另外,我没有时间创建一个适用于您的正则表达式。我猜您可以简化并尝试使用类似于以下表达式的表达式:
^(?![_])(?!.*[_]{2})[a-zA-Z0-9_]{2,19}[a-zA-Z0-9]$
您可以省略结尾处的负lookback,但也可以省略其他两个负lookaheads(?![!])(?!.[!]{2})
,并且只使用开头的一个来检查长度3-20
您可以匹配1+次[a-zA-Z0-9]
,而不是2个负lookahead,这样字符串就不能以下划线开头
然后,使用重复模式匹配单个。
,然后再匹配1+次[a-zA-Z0-9]
,以便字符串不能以下划线结尾
^(?=.{3,20}$)[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)+$
请参阅如何更新此文件,使其不需要下划线,而是允许下划线?我尝试摆弄演示,但未能正确执行。@Tristan您可以使用问号将其设置为可选的。