0

我正在尝试在不使用任何插件的情况下在 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;
}
4

1 回答 1

1

你提到的正则表达式——顺便说一句众所周知,将匹配 99% 的电子邮件。

我认为它对您不起作用的唯一原因是您正在为功能电子邮件提供周围空间或间距,您必须在测试之前修剪电子邮件。


- 编辑 -

您的脚本 (myscript.js:170) 有一个错误:

    if (! check(isEmail, "email", "Invalid email.") ) {

删除电子邮件变量周围的引号

    if (! check(isEmail, email, "Invalid email.") ) {

行相同:159 和 171

于 2013-08-09T22:51:02.840 回答