Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于电子邮件验证的正则表达式不适用于子域?_Javascript_Jquery - Fatal编程技术网

Javascript 用于电子邮件验证的正则表达式不适用于子域?

Javascript 用于电子邮件验证的正则表达式不适用于子域?,javascript,jquery,Javascript,Jquery,我正在使用以下内容进行电子邮件验证: 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]{2,3}){1,2}$/; // For Email Validation

if (filter.test(emailInputVal))) {console.log('good')}
出于某种原因,上述方法不适用于有子域的电子邮件。你知道为什么吗

xxxx@xxx.xxx.com 

谢谢

您的最后一个组件是:任意长度的单词,然后是一个或两个实例(点、两个或三个字母的单词)。我希望”xxxx@xxx.xxx.com“工作,但可能不是更现实的例子,如”xxxx@xxx.example.com“因为你的域名不是两三个字母的单词


帮你自己一个忙:简单地使用
/^[^@]+@[^@]+\.[^@]+$/
更多信息:

,因为正则表达式不正确。请尝试以下方法:

var filter = /^\w+(?:\.\w+)*@\w+(?:\.\w+)+$/;
验证电子邮件地址时,此链接可能会帮助您:

官方RFC 2822标准 此非平凡的简化正则表达式符合RFC 2822标准:

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

这是一个奇怪的正则表达式。它肯定没有做你期望它做的事情,例如,因为当你指的是一个文字点时,这个点并没有逃逸

既然用正则表达式验证电子邮件地址是不可能的,为什么不使用更简单的方法呢

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

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

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

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

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

  • 使用类似于
    /^[^@]+@([a-Za-z0-9-]+\)*[a-Za-z0-9-]+$/
    的简单表达式进行客户端验证,以捕获输入错误
  • 检查服务器端的DNS记录
  • 发送确认邮件

@AnApprentice:别忘了检查我所附的链接,其中显示了几个电子邮件检查正则表达式,并深入解释了使用正则表达式进行电子邮件验证。不处理引号,将与新的顶级域断开;既然您可能会发送确认邮件,为什么不使用一个不那么严格的表达式?为什么在您必须发送确认邮件时(可能是在检查服务器端的DNS记录之后)拒绝有效地址?添加对引号字符串的支持会使表达式稍微复杂化:
/^((\\“\\”\[^“])*“\\[^\s]+@([a-Za-z0-9-]+\)*[A-Za-z0-9-]+$/
应该可以。。。