jQuery Validation Plugin允许电子邮件中的特殊字符?

时间:2014-02-10 11:35:29

标签: jquery jquery-validate email-validation

我正在使用jQuery Validation Plugin,所有内容都可以正常处理电子邮件,因为ß字符是允许的(当然应该是无效的)?

这不仅仅发生在我的网站上我甚至可以绕过办公室演示网站上的验证:http://jquery.bassistance.de/validate/demo/

我正在使用的规则:

$("#form").validate({
    rules: {
            txtSubscribe: {
                required: true,
                email: true
            }
    }
});

有没有办法在插件电子邮件验证规则中添加特定字符,或者是否有人知道如何实施适用于所有电子邮件规则的解决方案? (因为我经常在一个非常大的网站上使用它。)

2 个答案:

答案 0 :(得分:1)

只要交换服务器支持该字符,该字符就有效。

您可以添加自己的正则表达式以根据需要验证电子邮件:

$(function ()
{
    $.validator.addMethod("loginRegex", function(value, element) {
        return this.optional(element) || /^[a-z0-9\-]+$/i.test(value);
    }, "Username must contain only letters, numbers, or dashes.");

    $("#signupForm").validate({
        rules: {
            "login": {
                required: true,
                loginRegex: true,
            }
        },
        messages: {
            "login": {
                required: "You must enter a login name",
                loginRegex: "Login format not valid"
            }
        }
    });
});

示例来自此处:using the jquery validation plugin, how can I add a regex validation on a textbox?

答案 1 :(得分:0)

我在github https://github.com/jzaefferer/jquery-validation/issues/1012上打开了一个问题报告,看来这将在下一个版本中使用电子邮件的HTML5规范进行修复:http://www.w3.org/TR/html5/forms.html#valid-e-mail-address

正则表达式:

/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

这是一个jsfiddle,显示这将在我的情况下返回正确的结果:

http://jsfiddle.net/rv8bq/

可以覆盖默认验证:

$.extend($.validator.methods, {
    email: function(value, element) {
      var re = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
        return this.optional(element) || re.test(value);
    }
});