if语句的正则表达式

时间:2012-10-22 21:06:56

标签: javascript jquery regex if-statement validation

我将此作为我的正则表达式:

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”。但是,如果我只输入一些文本,例如,当我想要“请输入有效的电子邮件地址”时,它仍然会显示“OK”。有任何想法。顺便说一句,我仍然是这个东西的主人!

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我看到你有标记,所以看看JQuery validate plugin,它会比简单的正则表达式更好。

但如果您仍想使用正则表达式,请参阅Validate email address in JavaScript?

答案 2 :(得分:1)

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

相反,您有几个选择。使用匹配99%电子邮件的正则表达式,使用电子邮件验证库在服务器端执行,或者实现有限状态机以正确解析它。状态机可能太笨重(虽然允许整洁的东西,如可能的拼写错误的建议)和所有服务器端 - 这你最好做什么(如果有人禁用JavaScript?) - 失去了你的好处型检查。

这留下了一个更简单的正则表达式,它与所有合法的电子邮件都不匹配,但匹配得足以使某人注册的机会不是很小。 来自Validate email address in 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");   
}

答案 3 :(得分:0)

你的正则表达式有点错字。试试这个:

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

那也应该处理.museum案例