用于域验证的javascript正则表达式在Safari中不起作用

时间:2019-12-18 13:16:19

标签: javascript regex safari

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

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

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

我不知道细节,但是听起来野生动物园不支持负面报道。

我确实需要一些帮助。

1 个答案:

答案 0 :(得分: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