用于域验证的JavaScript正则表达式在野生动物园中不起作用

问题描述 投票:1回答:1

我不知道为什么Safari会对此JavaScript正则表达式说错误。

^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,63}$

仅是域的验证,我在此部分中出错(?<!-)域名不应以连字符结尾。

我不知道细节,但听起来像野生动物园不支持负面的背后。

我确实需要解决我的问题。

javascript regex safari
1个回答
1
投票

正则表达式中的((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+部分旨在匹配1到63个字符块,后跟一个点,该点由ASCII字母或数字或连字符组成,但不以连字符开头或结尾。尽管(?!-)负前瞻可以在符合JS ES5的正则表达式中使用,但此处不支持(?<!-)后视。

因此,解决方案是从一开始就检查字符串中的-.序列,如果找到该序列,则使整个匹配失败:

^(?!.*-\.)(?:(?!-)[A-Za-z0-9-]{1,63}\.)+[A-Za-z]{2,63}$
 ^^^^^^^^^

请参见regex demo

如果担心.*-\.模式所涉及的性能和回溯,可以将(?!.*-\.)替换为(?![^-]*(?:-(?!\.)[^-]*)*-\.),请参阅another regex demo。>>

© www.soinside.com 2019 - 2024. All rights reserved.