0

当我在不接受任何密钥的表单中+@[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/;将此代码添加到电子邮件字段中时。/^[\ba-zA-Z\s-\.\_]

function mailonly(e){

var code;
if (!e) var e = window.event;
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code);
    var AllowRegex  =/^[\ba-zA-Z\s-\.\_]



+@[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/;

    if (AllowRegex.test(character)) return true;
    return false;
}
4

2 回答 2

0

您需要在字符类中转义破折号(或将其放在类的开头/结尾):

/^[\ba-zA-Z\s\-\.\_]    or    /^[\ba-zA-Z\s\.\_-]

顺便说一句,无需转义其他字符:

/^[\ba-zA-Z\s._-]

\b这里无关:

/^[a-zA-Z\s._-]

正则表达式的其余部分看起来不错。

但不要尝试使用正则表达式验证电子邮件。例如,您可以简单地使用/.+@.+/,同时发送包含将验证帐户的链接的确认电子邮件。

于 2013-11-06T13:53:21.250 回答
0

正如其他人所说,您的正则表达式不会正确验证电子邮件地址。但是您遇到的具体问题很可能是您没有转义 \s 和 . 在你的正则表达式的第一部分。正则表达式解释器将尝试将其读取为范围 \s-。这当然不是什么。

sp00m也打过我吧。除了摆脱 \b 我想您不想在电子邮件地址的第一部分匹配 \s 之外,您还应该在该部分匹配 0-9。

于 2013-11-06T13:55:24.390 回答