Javascript 验证电子邮件的正则表达式

Javascript 验证电子邮件的正则表达式,javascript,Javascript,我有一个收件人文本框,允许输入电子邮件地址并发送给此人。正如您所知,当某人输入电子邮件时,需要考虑使用正则表达式。例如,没有@的电子邮件不是有效的电子邮件 因此,我编写了一个函数来检查电子邮件的正则表达式,如下所示: //check email address function validateEmail(email) { var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)

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

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

//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);
    }
所以,如果我输入上面的内容,它会将其视为无效,但鉴于我在正则表达式中的表现不好,有没有办法让它通过

编辑:

这是我的正则表达式的外观:

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,}))(?:$|(?=,)))/;
var re=/(?:,)(([^()[\]\],;:\s@“]+(\.[^()[\]\],;:\s@“]+)*)(\”+)(\”)((\[[0-9]{1,3}.[0-9]{0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.}.[1,3}.];

在模式的开头,为
或字符串的开头添加一个非捕获组:

(?:^|,)
在模式的末尾,为字符串的末尾添加一个非捕获组,或对
进行前瞻:

(?:$|(?=,))
如果用逗号分隔,则允许在一行上进行多个匹配

(?:^|,)(([^<>()[\]\\.,;:\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}.[0-9]{1,3}.[1,3}.]}.]
^^^^^^^                                                                                                                                                       ^^^^^^^^^^^

如果您不仅想验证电子邮件,还想提取电子邮件,这有时会包括一个前导逗号,这可能是不可取的-要解决这一问题,请在另一个组中的初始非捕获组之后将所有内容括起来:

(?:^|,)((([^<>()[\]\\.,;:\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}.[0-9]{1,3}.[0-9]}.[1,3}.[1,3}.]
仅电子邮件地址将在第一个捕获的组中

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

功能验证电子邮件(电子邮件){
变量re=/(?:^,)(([^()[\]\,;:\s@\“]+(\.[^()[\]\,;:\s@\“]+)*(\“+”)((\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]}.[1,3}.]}.[1,3}.];
返回电子邮件。替换(重新“”)='';
}

console.log(validateEmail('test@hotmail.com,test123@hotmail.com'));请检查此代码:


函数sendmessage(){
var recipient=document.getElementById(“收件人”).value;
var结果=验证邮件(收件人);
警报(结果);
}   
函数validateEmails(emailString){
var regex=/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var result=emailString.replace(/\s/g,“”).split(/,|;/);
for(变量i=0;i
邮寄
整个事情看起来怎么样?我真的不善于识别我看到的符号。因此,它基本上是检查
电子邮件的结尾是否有逗号
?它只会在电子邮件开始时(在字符串开头或逗号之后)和结束时(在字符串末尾或另一个逗号之前)验证电子邮件。因此它也会检查
,test@hotmail.com
是否为无效权限?那
test@hotmail.com,
?尝试您的解决方案并输入
test@hotmail.com,test123@hotmail.com
但它仍然抛出无效的。可能重复
(?:^|,)((([^<>()[\]\\.,;:\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,}))(?:$|(?=,)))