返回true或false后:
return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,8})+$/.test(str));
其中str是testing123@testing123.testing123 完成大约需要25秒。
通常,较短的字符串不到1秒钟。
这很可能是由于回溯。我对Regex不是很了解,有人可以帮助我减少处理电子邮件所需的时间。例如。它必须有字母然后@然后字母。然后是字母,不能太长。
答案 0 :(得分:3)
只需使用
\S+@\S+
甚至(带锚点)
^\S+@\S+$
并且实际上向该地址发送电子邮件,而不是使用复杂的,可能容易出错的表达式。
答案 1 :(得分:1)
在每个?
后删除[.-]
:
/^\w+(?:[.-]\w+)*@\w+(?:[.-]\w+)*(?:\.\w{2,8})+$/
请参阅regex demo
在([.-]?\w+)*
中,[.-]?
匹配.
或-
的1或0次匹配,并且(\w+)*
之后整个组模式减少到\w+
1}},它导致了太多的冗余回溯步骤。
此外,如果您仅使用分组构造来量化一组子模式,则最好使用非捕获组。
现在,关于
它必须有字母,然后是@然后是字母。然后是字母,不能太长
我看到其他人建议使用^\S+@\S+\.\S+$
类似解决方案,这是一个好主意,只需确保您了解\S
匹配除空白之外的任何字符(不仅仅是字母) 。此外,这实际上并没有提供最终的解决方案,因为"不能太长"条件不满足(+
匹配从1到很多次出现,这就是为什么它被描述为 1或更多)。
我建议在HTML5 模式属性中使用模式,并限制用户可以使用maxlength
属性键入的字符数:
input:valid {
color: black;
}
input:invalid {
color: red;
}

<form name="form1">
<input pattern="\S+@\S+\.\S+" maxlength="256" title="Please enter an email address like name@myhost.com!" placeholder="name@myhost.com"/>
<input type="Submit"/>
</form>
&#13;
注意:模式正则表达式是通过用^(?:
和)$
封闭模式来编译的,您不需要使用{{1这里和正则表达式中的^
和$
。因此,pattern="\S+@\S+\.\S+"
被翻译为:
^(?:
(由HTML5添加) - 字符串的开头(以及非捕获组的开始)\S+
- 任何一个或多个非空白字符@
- @
字符\S+
- 任何一个或多个非空白字符\.
- 一个点\S+
- 任何一个或多个非空白字符)$
(由HTML5添加) - 非捕获组结束,字符串结尾匹配。答案 2 :(得分:1)
这是匹配电子邮件的RFC 2822 Standrard。它今天可以发送match 99.9%封电子邮件。
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
如果您只想捕获语法错误,可以使用
\S+@\S+
的答案之一
答案 3 :(得分:0)
您可以使用此Regex
查看电子邮件:
var emailregex = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
答案 4 :(得分:0)
用()替换()*? PS:匹配电子邮件的奇怪表达:)
答案 5 :(得分:0)
匹配电子邮件的有效方法是:
\S+@\S+\.\S+
它很短,几乎与任何电子邮件匹配,并且不匹配:
abc@abc
正如其他一些答案所述。