HTML5模式验证被忽略

时间:2016-01-18 20:06:41

标签: regex html5

我有一个电子邮件输入字段,我有^[^@]+@[^@.]+.[^@]+$的正则表达式,但在运行时它不需要.com。

转到https://jsfiddle.net/uscktx9d/并输入www @ www并点击提交。这应该是验证失败但不是。正如您在此处看到的https://regex101.com/r/pB6iF4/1,正则表达式应该要求.com。

为什么我的HTML5不需要这个?

2 个答案:

答案 0 :(得分:3)

如果您要对电子邮件使用HTML5输入验证,请使用type email。这将对电子邮件进行原生HTML5验证,并具有额外的好处(例如在移动设备和虚拟键盘上显示@符号)。

另外,请记住,任何前端验证都应该在后端重新验证。

要回答您的问题,您需要使用反斜杠转义.

答案 1 :(得分:1)

在正则表达式中,应将文字点声明为转义\.符号。如果您想确保将它们视为文字,请参阅应转义的Special characters in regular expressions

此外,HTML5 pattern attribute值默认为固定,即整个模式包含在^(?:)$中。

  

用于此属性的正则表达式语言与JavaScript中使用的正则表达式语言相同,只是模式属性与整个值匹配,而不仅仅是任何子集(有点像它暗示^(?:在模式的开始和结尾的)$

因此,您只需要使用

<input name="asdf" pattern="[^@]+@[^@.]+\.[^@]+" placeholder="email@example.com" title="email@example.com">

请参阅updated fiddle