0

我正在尝试使用以下 javascript 来验证正确的电子邮件地址,但在此脚本中出现错误。谁能明白为什么?先感谢您。

function isEmail(str){
    var reg = new RegExp("?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]");
    return reg.test(str);
}
4

3 回答 3

0

您有一个未转义的字符串字符。任何时候你用 . 打开一个字符串",任何时候你想"在字符串中,它都需要用反斜杠转义,\".

function isEmail(str){
    var reg = new RegExp("?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]");
    return reg.test(str);
}
于 2012-10-15T19:22:15.073 回答
0

错误是你有一个未转义的双引号

var reg = new RegExp("?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\" ....
-----------------------------------------------------------------------------------------^

注意:只要看看你的问题的颜色编码,你就会看到它。也许您的 IDE 也有颜色编码。

于 2012-10-15T19:22:24.960 回答
0

电子邮件验证很容易出错。因此,我建议您使用Verimail.js

为什么?

  • 语法验证(根据 RFC 822)
  • IANA TLD 验证
  • 最常见 TLD 和电子邮件域的拼写建议
  • 拒绝临时电子邮件帐户域,例如 mailinator.com

这很简单!下载并在您的网站上包含该脚本:

https://raw.github.com/comfirm/Verimail.js/master/src/verimail.js

然后使用:

var email = "cool@fabeook.cmo";
var verimail = new Comfirm.AlphaMail.Verimail();

verimail.verify(email, function(status, message, suggestion){
    if(status < 0){
        // Incorrect syntax!
    }else{
        // Syntax looks great!
    }
});

Verimail.js 甚至还有一个非常易于使用的jQuery 插件:

$("input#email-address").verimail({
    messageElement: "p#status-message"
});
于 2012-10-16T13:40:37.340 回答