Regex 模式属性值不是有效的正则表达式

Regex 模式属性值不是有效的正则表达式,regex,html,google-chrome,Regex,Html,Google Chrome,My HTML具有以下输入元素(用于接受以“.com”结尾的电子邮件地址): 在过去2个月的某个时候,Chrome在验证输入时开始返回以下JavaScript错误(并阻止提交父表单): 模式属性值 [\-a-zA-Z0-9~!$%\^-*.[\-a-zA-Z0-9~!$%\^-*.[\-a-zA-Z0-9~!%\\\\.-++%\.-[a-zA-Z0-9\.-[\.[\-a-zA-Z0-9\+]*.[cC][oO mM])(:[0-9]{1,5}$ 不是有效的正则表达式:未捕获的语法错误:无

My HTML具有以下输入元素(用于接受以“.com”结尾的电子邮件地址):


在过去2个月的某个时候,Chrome在验证输入时开始返回以下JavaScript错误(并阻止提交父表单):

模式属性值
[\-a-zA-Z0-9~!$%\^-*.[\-a-zA-Z0-9~!$%\^-*.[\-a-zA-Z0-9~!%\\\\.-++%\.-[a-zA-Z0-9\.-[\.[\-a-zA-Z0-9\+]*.[cC][oO mM])(:[0-9]{1,5}$
不是有效的正则表达式:未捕获的语法错误:无效 正则表达式:
/[\-a-zA-Z0-9~!$%\^&*.[\-a-zA-Z0-9~!$%\.-/*.[\-a-zA-Z0-9~!$%\^&*.*.[\.-a-zA-Z0-9.++.[cC][oO mM])(:[0-9]{1,5}/

喜欢正则表达式模式,但Chrome不喜欢。我有什么语法错误?

使用

pattern="[-a-zA-Z0-9~!$%^&*_=+}{'?]+(\.[-a-zA-Z0-9~!$%^&*_=+}{'?]+)*@([a-zA-Z0-9_][-a-zA-Z0-9_]*(\.[-a-zA-Z0-9_]+)*\.([cC][oO][mM]))(:[0-9]{1,5})?"
问题是一些不应该转义的字符被转义,例如字符类内的
'
^
。请注意,字符类内的
-
可以转义,但在其开始时不必转义

还请注意,HTML5引擎将整个模式包装在
^(?:
)$
构造中,因此不需要在模式的末尾使用
$
字符串结束锚定

测试:


我的应用程序遇到了相同的问题,但解决方法略有不同。我的正则表达式与公认答案描述的问题相同(特殊字符在字符类中转义,但不需要转义),但是我正在处理的正则表达式来自外部源,因此我无法修改它。这种正则表达式通常适用于大多数语言(通过PHP验证),但我们发现它与HTML5不同


我的简单解决方案是,在将正则表达式应用于输入的
模式
属性之前对其进行url编码。这似乎满足了HTML5引擎的要求,并且工作正常。JavaScript的
encodeURIComponent
非常适合。

一个有根据的猜测:\\而不是\'。JeromyFrench有许多方法可以根据程序对文本进行url编码您正在使用的ng语言,所以我不想偏离所有不同的方法。尽管如此,我还是提供了如何使用JavaScript实现这一点的想法。
pattern="[-a-zA-Z0-9~!$%^&*_=+}{'?]+(\.[-a-zA-Z0-9~!$%^&*_=+}{'?]+)*@([a-zA-Z0-9_][-a-zA-Z0-9_]*(\.[-a-zA-Z0-9_]+)*\.([cC][oO][mM]))(:[0-9]{1,5})?"