繁体   English   中英

验证电子邮件正则表达式

[英]Validate regex of email

我有一个收件人文本框,可以输入电子邮件地址并发送给该人。如您所知,有人输入电子邮件时要考虑正则表达式。 例如,没有@的电子邮件不是有效的电子邮件。

因此,我编写了一个函数来检查电子邮件的正则表达式,如下所示:

//check email address
    function validateEmail(email) {
        var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(email);
    }

因此,如果我写test@hotmail.com那么这将是有效的,而test@@@hotmail.com将是无效的。 是的,这没有问题。 但是,我可以在我的文本框中以这种形式发送给多个收件人:

test@hotmail.com,test123@hotmail.com,....

因此,如果我输入上面的内容,它将被视为无效,但是看到我的正则表达式表达式不好,是否有办法让它通过?

编辑:

正则表达式如下所示:

var re = /(?:^|,)((([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))(?:$|(?=,)))/;

在模式的开始,增加对非捕获组,或者字符串的开头:

(?:^|,)

并且在图案的端部,添加非捕获组的字符串,或者为先行的端部,

(?:$|(?=,))

如果用逗号隔开,则允许在一行上进行多个匹配。

(?:^|,)(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))(?:$|(?=,))
^^^^^^^                                                                                                                                                       ^^^^^^^^^^^

https://regex101.com/r/Dzyfqt/1

如果您不仅要验证电子邮件,还要提取电子邮件,则有时会包含一个前导逗号,这可能是不希望的-要解决此问题,请将所有内容括在最初的非捕获组之后,再放入另一个组:

(?:^|,)((([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))(?:$|(?=,)))

并且仅电子邮件地址将位于第一个捕获的组中。

如果要检查字符串是否包含逗号分隔的电子邮件地址,而除了逗号分隔的电子邮件地址,则可以使用第一个模式,并将每个匹配的电子邮件替换为空字符串,并检查是否最后一个结果字符串为空:

 function validateEmail(email) { var re = /(?:^|,)(([^<>()[\\]\\\\.,;:\\s@\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\"]+)*)|(\\".+\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))(?:$|(?=,))/g; return email.replace(re, '') === ''; } console.log(validateEmail('test@hotmail.com,test123@hotmail.com')); 

请检查以下代码:

 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> </head> <script> function sendmessage(){ var recipient = document.getElementById("recipient").value; var result=validateEmails(recipient); alert(result); } function validateEmails(emailString) { var regex = /^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$/; var result = emailString.replace(/\\s/g, "").split(/,|;/); for(var i = 0;i < result.length;i++) { if(!regex.test(result[i])) { return false; } } return true; } </script> <body> &emsp;&emsp; To:<input type="email" style="font-size: 10pt;" size="70" id="recipient"><br><br> <div class="Send"> <button type="button" style="font: 13px/1.231 Trebuchet MS;" onclick="sendmessage()"> Send </button> </div> </body> </html> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM