我有一个收件人文本框,允许输入电子邮件地址并发送给该人。如您所知,有人输入电子邮件时要考虑正则表达式。例如,没有@
的电子邮件不是有效的电子邮件。
所以我写了一个函数来检查电子邮件的正则表达式,如下所示:
//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,}))(?:$|(?=,)))/;
答案 0 :(得分:4)
在模式的开头,为,
或字符串的开头添加一个非捕获组:
(?:^|,)
然后在模式的末尾,为字符串的末尾添加一个非捕获组,或者为,
前行:
(?:$|(?=,))
如果用逗号分隔,这将允许在一行上进行多个匹配。
(?:^|,)(([^<>()[\]\\.,;:\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'));
答案 1 :(得分:0)
请检查以下代码:
<!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>