我正在尝试在不使用任何插件的情况下在JQuery中构建验证系统
我的JQuery代码就是这样,我为每个输入都有一个验证函数,例如:
function isEmail(email) {
var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
alert("email is "+regex.test(email));
return regex.test(email);
}
你会注意到我在这个中有一个警告,因为尽管从一个备受好评的答案中借用了正则表达式,但电子邮件仍未正确验证 - > Email validation using jQuery
我用几封有效的电子邮件测试了它无济于事。从这里获取的有效电子邮件 - > http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses。我将正则表达式改为/ \ S + /并且其他一切都正常工作,所以我知道问题出在正则表达式中。
无论如何,为什么这个正则表达式没有评估为真?我的理解是:
/^([a-zA-Z0-9_\.\-\+])+
开始使用任何字符a-z,A-Z,0-9,。, - 或+。一次或多次
\@
后跟“@”符号
(([a-zA-Z0-9\-])+\.)+
后跟一个或多个字符a-z,A-Z,0-9或 - 中的一个或多个,然后是句点“。”
([a-zA-Z0-9]{2,4})+$
以两个,三个或四个字符中的一个或多个结尾a-z,A-Z,0-9
我有一些消息,所以这里有一些奇怪的行为。看看这个从我的代码中复制并粘贴的jsfiddle - > http://jsfiddle.net/hxcD3/。电子邮件评估为true。但是,如果您访问我正在处理的网站 - > danmacmill.host22.com,并在联系人电子邮件输入中键入相同的内容,它显示为false。
您还会注意到我在控制台中记录了传递给JQuery的电子邮件变量,因此您可以看到确切的字符串。为什么它没有正确验证是我的问题。作为参考,这是我的验证检查器代码:
function check(isValid, name, message) {
if (! isValid(name) ) {
if (! $('#div-'+name).hasClass("warned") ) {
$('#div-'+name).prepend('<div class="bubble-wrapper"><div class="bubble"><p>'+message+'</p></div></div>');
var div = $('#div-'+name).position();
$('#info p:first-child').text("top: "+div.top);
$('#info p:nth-child(2)').text("left: "+div.left);
$('#div-'+name+' .bubble-wrapper').css({
top: div.top - 35 + "px"
});
$('#div-'+name).addClass("warned");
}
return false;
}
else
return true;
}
答案 0 :(得分:1)
你提到的正则表达式 - 顺便说一下well known,将匹配99%的电子邮件。
我认为它不适合您的唯一原因是您正在使用周围空间或间距来提供功能电子邮件,您必须在测试之前修剪电子邮件。
<小时/> - 编辑 -
您的脚本(myscript.js:170)出错:
if (! check(isEmail, "email", "Invalid email.") ) {
删除电子邮件变量
周围的引号 if (! check(isEmail, email, "Invalid email.") ) {
线条相同:159和171