1

我有这个作为我的正则表达式:

var email = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

这是我的 if 语句:

if($('#email').val() ==""){  
    $('#emailErrorMsg').text("Please enter a valid email address.");
}  
else if(!email.test('#email')) {   
    $('#emailErrorMsg').text("OK");   
}  
else($('#emailErrorMsg').text("Please enter a valid email address."));  
});

当我输入有效的电子邮件地址时,它会显示“OK”。但是,例如,如果我只输入一些文本,当我希望它说“请输入有效的电子邮件地址”时,它仍然会说“确定”。任何人都有任何想法。顺便说一句,我仍然是这方面的业余爱好者!

4

4 回答 4

2

主要问题是您?在正则表达式的末尾有一个 a ,后面是括住整个模式的括号。这有效地使整个匹配成为可选的,因此正则表达式将匹配任何内容。

另请注意,您正在测试文字 string #email,而不是#email元素的值。确保将适当的字符串传递给test().

于 2012-10-22T21:30:03.353 回答
1

I see that you have tag, so take a look to JQuery validate plugin, it will be better than a simple regex.

But if you still want regex, see Validate email address in JavaScript?

于 2012-10-22T21:15:26.003 回答
1

验证电子邮件很困难完全正确的正则表达式是一个真正的怪物,你可以在http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html看到(如果你敢的话),这可能不是你想要的。

相反,您有几个选择。使用匹配 99% 的电子邮件的正则表达式,在服务器端使用电子邮件验证库,或者实现一个有限状态机来正确解析它。状态机可能太笨重了(尽管允许一些简洁的东西,比如对可能的拼写错误的建议)并且在服务器端进行 - 你最好还是这样做(如果有人禁用了 JavaScript 怎么办?) - 失去了 as-you 的好处-类型检查。

这留下了一个更简单的正则表达式,它不匹配所有合法的电子邮件,但匹配的足够多,以至于有人注册的机会并不大。JavaScript中验证电子邮件地址的正则表达式?应该做得很好:

/^(([^<>()[\]\\.,;:\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,}))$/

另外,你犯了一个小错字:

else if(!email.test('#email')) {   
    $('#emailErrorMsg').text("OK");   
}

正在测试字符串“#email”——而不是 ID 为“email”的元素。将其更改为:

else if(!email.test($('#email').val())) {   
    $('#emailErrorMsg').text("OK");   
}
于 2012-10-22T21:29:50.627 回答
0

您的正则表达式中有一个小错字。尝试这个:

var email = /^([\w-\.]+)@([\w-]+\.)+[\w-]{2,6}?$/;

那也应该处理 .museum 案

于 2012-10-22T21:27:14.743 回答