我正在尝试在不使用任何插件的情况下在 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);
}
你会注意到我在这个有一个警告,因为尽管正则表达式是从一个著名的答案中借来的,但电子邮件没有正确验证 ->使用 jQuery 进行电子邮件验证
我用几封有效的电子邮件对其进行了测试,但无济于事。从此处获取的有效电子邮件 -> http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses。我将正则表达式更改为 /\S+/ ,其他一切正常,所以我知道问题出在正则表达式中。
无论如何,为什么这个正则表达式不评估为真?我的理解是:
/^([a-zA-Z0-9_\.\-\+])+
以任何字符 az、AZ、0-9、.、- 或 + 开头。一次或多次
\@
后跟“@”符号
(([a-zA-Z0-9\-])+\.)+
后跟一个或多个字符 az、AZ、0-9 或 - 中的一个或多个,然后是句点“.”。
([a-zA-Z0-9]{2,4})+$
以两个、三个或四个字符中的一个或多个结尾 az,AZ,0-9
编辑
我有一些消息,所以这里发生了一些奇怪的行为。看看这个从我的代码复制和粘贴的 jsfiddle -> http://jsfiddle.net/hxcD3/。电子邮件评估为真。但是,如果您访问我正在处理的网站 -> 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;
}