用于电子邮件validation的正则表达式不使用子域名?

我正在使用以下内容进行电子邮件validation:

var filter = /^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/; // For Email Validation if (filter.test(emailInputVal))) {console.log('good')} 

出于某种原因,上述内容不适用于具有子域名的电子邮件任何想法为什么?

 xxxx@xxx.xxx.com 

谢谢

因为你的正则表达式不正确。 试试这个:

 var filter = /^\w+(?:\.\w+)*@\w+(?:\.\w+)+$/; 

validation电子邮件地址时,此链接可以帮助您:

http://www.regular-expressions.info/email.html

官方RFC 2822标准

这个符合RFC 2822标准的非平凡简化正则表达式:

 var filter = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[AZ]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b/; 

这是一个奇怪的正则表达式。 它肯定没有做你期望它做的事情,例如因为当你的意思是字面点时,点不会被转义。

因为无论如何都不可能真正validation带有正则表达式的电子邮件地址 – 为什么不去寻找更简单的东西呢?

 /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,6}$/i 

这仍然会匹配一些无效的地址,并拒绝一些有效的地址(正如所有可读的正则表达式那样),但最后你必须向用户提交的邮件地址发送一封确认邮件,看看你是否真的想要回复validation它。

您无法使用正则表达式可靠地validation电子邮件地址。 我要做的是:

  • 使用一个简单的表达式,如/ /^[^@]+@([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+$//^[^@]+@([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+$//^[^@]+@([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+$/用于客户端validation以捕获拼写错误
  • 检查服务器端的DNS记录
  • 发送确认邮件

你的最后一个组成部分是:任何长度的单词,然后是一个或两个(点,两个或三个字母单词)的实例。 我希望“xxxx@xxx.xxx.com”可以工作,但也许不是更真实的例子,如“xxxx@xxx.example.com”,因为你的域名不是两个或三个字母的单词。

帮自己一个忙:简单地使用/^[^@ ]+@[^@ ]+\.[^@ ]+$/更多相关信息: http : //nedbatchelder.com/blog/200908/humane_email_validation.html

我不确定上面的代码是否可以使用任何格式,因为在if条件中有一个额外的,删除它也适用于子域:

 if (filter.test(emailInputVal)) {console.log('good')}