我有一个符合RFC 5322的电子邮件正则表达式模式来验证我的输入。这适用于所有浏览器,但Chrome在控制台上显示以下错误:
Pattern attribute value ^[-a-z0-9~!$%^&*_=+}
{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_]
[-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz
|com|coop|edu|gov|info|int|mil|museum|name
|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]
{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))
(:[0-9]{1,5})?$
is not a valid regular expression:
Uncaught SyntaxError: Invalid regular expression:
/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^
&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z
0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov
|info|int|mil|museum|name|net|org|pro|travel
|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.
[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/
Invalid escape
我就是找不到哪个块有这个无效转义。
2条答案
按热度按时间smtd7mpg1#
最新的Chrome(至少从114开始)现在实际上使用了
/v
标志。这要求转义字符类中的所有特殊字符。例如,要匹配
{
或}
,您应该写入[\{\}]
而不是[{}]
。yshpjwxd2#
由于Chrome
pattern
属性会自动添加u
修饰符,因此会应用更严格的正则表达式语法规则。基本上,你不能逃避任意的符号。如果该符号不是特殊的正则表达式元字符,则不能对其进行转义,否则将得到此错误。所以,在你的例子中,单撇号不能被转义。删除它前面的转义反斜杠,正则表达式将再次在每个浏览器中工作。