jQuery表单验证,仅允许.EDU和.edu.nn(其中nn是一个2位数的国家代码)电子邮件地址

时间:2015-01-06 21:22:49

标签: javascript jquery jquery-validate

我使用此方法进行了.edu电子邮件验证 - jQuery Form Validation, Only Allow .EDU Email Addresses

但是,我不想只是.edu或只是.edu.nn(其中nn是一个2位数的国家/地区代码),我想将两者都包含在一起。无法弄清楚如何实现这一目标。 以下是接受.edu和.edu.fr的代码 - 我需要接受除.edu之外的所有其他2位数国家/地区代码

感谢您的帮助!

$.validator.addMethod("edu", function (value, element, param) {
// Make it work optionally OR
//  Check the last 4 and 7 characters and ensure they match .edu and .edu.2-digit-country-code
return (this.optional(element) || value.slice(-4) == ".edu" || value.slice(-7) ==  ".edu.fr");
}, "Please enter valid .edu email address");

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

2 个答案:

答案 0 :(得分:1)

由于.slice()不会同时检查两种可能性,因此使用带有可选标志的RegExp会更快:

此正则表达式将匹配两个条件:

var regex = /\.edu(\.[a-z]{2})?$/

在这里看到它在REPL中工作:

> regex.test('somename.edu')
true
> regex.test('emai.com')
false
> regex.test('email.edu.cz')
true

然后您的验证器功能会像这样小:

$.validator.addMethod("edu", function (value, element, param) {
    // Make it work optionally OR
    //  Check the last 4 and 7 characters and ensure they match .edu and .edu.2-digit-country-code
    return (value.match(/\.edu(\.[a-z]{2})?$/));
}, "Please enter valid .edu (or .edu.NN) email address");

这是另一个测试RegExphttp://regexpal.com/

的网站

此外,以下是我使用的RegExp语法的一些解释:

x?:表示匹配x 0次或更多次(有效x是可选的)

x{N}:表示匹配x完全N次(用于匹配2个字母a-z)

$:表示匹配'输入结束'(否则someacct.edu.fr@gmail.com也会匹配)

希望有所帮助

答案 1 :(得分:0)

使用正则表达式匹配。 Here是一个很棒的工具。

/ \ EDU。[A-Z] [A-Z] / I

$.validator.addMethod("edu", function (value, element, param) {
// Make it work optionally OR
//  Check the last 4 and 7 characters and ensure they match .edu and .edu.2-digit-country-code
return (this.optional(element) || value.slice(-4).match(/\.edu/i) || value.slice(-7).match(/\.edu\.[a-z][a-z]/i);
}, "Please enter valid .edu email address");

$("#requestform").validate({
rules: {
    email: {
required: true,
email: true,
edu: true
},

    }
});