[英]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>    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.