验证电子邮件正则表达式

时间:2019-04-18 10:22:16

标签: javascript

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

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

//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,}))(?:$|(?=,)))/;

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>

&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>