电子邮件正则表达式中缺少验证

时间:2018-07-20 08:46:34

标签: javascript regex validation

所以,这是我的代码:

<p>A form with a password field that must contain 8 or more characters that are of at least one number, and one uppercase and lowercase letter:</p>

<form action="">
Password: <input type="text" name="pw" pattern="[A-Za-z0-9._%+'-\]+@[a-z0-9.-]+\.[a-z]{2,4}$" required title="Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters">
<input type="submit">
</form>

<p><strong>Note:</strong> The pattern attribute of the input tag is not supported in Internet Explorer 9 and earlier versions.</p>

为什么允许

  1. test.com
  2. @ text.com

我在@上加了一个加号,以便在此之前有一个或多个字符。但这似乎不起作用

2 个答案:

答案 0 :(得分:2)

您的模式有问题,正在转义第一个]字符:

"[A-Za-z0-9._%+'-\]+@[a-z0-9.-]+\.[a-z]{2,4}$"
                 ^
                here

使用另一个\\转义"[A-Za-z0-9._%+'-\\]+@[a-z0-9.-]+\.[a-z]{2,4}$",它应该可以工作

ps:您说您不能使用type="email",但您可以看到其中的documentation,其中使用了正则表达式

答案 1 :(得分:1)

此问题是由于[A-Za-z0-9._%+'-\]+@[a-z0-9.-]是等于[A-Za-z0-9._%'\][+@.-]的单个字符类而导致的,因为您过早地以]字符类结尾的[A-Za-z0-9._%+'-]字符结束了。 / p>

请注意,通常只需使用type="email"来检查输入的字符串是否为电子邮件。但是,由于使用type="text"有一些限制,因此可以使用

pattern="[\w.%+'-]+@[a-z0-9.-]+\.[a-z]{2,4}"

\之前不能有],并且您可以放心地删除$,仅检查一次字符串的结尾(由HTML5自动完成)。

最终样式HTML5引擎将应用于输入,看起来像^(?:[\w.%+'-]+@[a-z0-9.-]+\.[a-z]{2,4})$

  • ^(?:-字符串的开头和未捕获的组
  • [\w.%+'-]+-1个或多个字母,数字,_.%+'或{{1} }
  • --一个@
  • @-1或molre小写ASCII字母,数字,[a-z0-9.-]+.
  • --一个点
  • \.-2、3或4个小写ASCII字母
  • [a-z]{2,4}-组和字符串的结尾。