当前位置:  开发笔记 > 编程语言 > 正文

jQuery验证:如何为正则表达式验证添加规则?

如何解决《jQuery验证:如何为正则表达式验证添加规则?》经验,为你挑选了8个好方法。

我正在使用jQuery验证插件.好东西!我想迁移现有的ASP.NET解决方案以使用jQuery而不是ASP.NET验证器.我错过了正则表达式验证器的替代品.我希望能够做到这样的事情:

$("Textbox").rules("add", { regularExpression: "^[a-zA-Z'.\s]{1,40}$" })

如何添加自定义规则来实现此目的?



1> PeterFromCol..:

感谢redsquare的回答,我添加了一个这样的方法:

$.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            var re = new RegExp(regexp);
            return this.optional(element) || re.test(value);
        },
        "Please check your input."
);

现在您需要做的就是验证任何正则表达式是这样的:

$("#Textbox").rules("add", { regex: "^[a-zA-Z'.\\s]{1,40}$" })

此外,看起来有一个名为additional-methods.js的文件包含方法"pattern",当使用不带引号的方法创建时,它可以是RegExp.

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/additional-methods.js


$("Textbox")应为$("#Textbox").
我会让RegExp在方法之外定义为文字,而不是从字符串调用.
这是非常有用的,应该包含在jquery中:(
或者将它添加到验证器,如下所示:... rules:{textbox_input_name_attr:{required:true,regex:"^ [a-zA-Z'.\\ s] {1,50} $"}},... .

2> redsquare..:

你可以使用addMethod()

例如

$.validator.addMethod('postalCode', function (value) { 
    return /^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))$/.test(value); 
}, 'Please enter a valid US or Canadian postal code.');

好文章https://web.archive.org/web/20130609222116/http://www.randallmorey.com/blog/2008/mar/16/extending-jquery-form-validation-plugin/


不要真的回答这个问题.如果你想要一般的正则表达式规则怎么办?有了这个答案,你必须为每个不同的正则表达式添加方法.

3> bshack..:

我在制作一个jQuery正则表达式验证器时把所有部分放在一起有些麻烦,但我让它工作......这是一个完整的工作示例.它使用'验证'插件,可以在jQuery Validation Plugin中找到




    
    
    
    


    

Log In


谢谢,使用完整的工作示例,我可以实现这一点.其他答案对我不起作用.

4> 小智..:

没有理由将正则表达式定义为字符串.

$.validator.addMethod(
    "regex",
    function(value, element, regexp) {
        var check = false;
        return this.optional(element) || regexp.test(value);
    },
    "Please check your input."
);

telephone: { required: true, regex : /^[\d\s]+$/, minlength: 5 },

这样更好,不是吗?



5> Markus Jarde..:

延伸PeterTheNiceGuy的答案:

$.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            if (regexp.constructor != RegExp)
                regexp = new RegExp(regexp);
            else if (regexp.global)
                regexp.lastIndex = 0;
            return this.optional(element) || regexp.test(value);
        },
        "Please check your input."
);

这将允许您将正则表达式对象传递给规则.

$("Textbox").rules("add", { regex: /^[a-zA-Z'.\s]{1,40}$/ });

在对象上设置-flag lastIndex时,必须重置属性.否则它将从与该正则表达式的最后一次匹配的位置开始验证,即使主题字符串不同.gRegExp

我的其他一些想法是让你使用正则表达式的数组,以及另一个否定正则表达式的规则:

$("password").rules("add", {
    regex: [
        /^[a-zA-Z'.\s]{8,40}$/,
        /^.*[a-z].*$/,
        /^.*[A-Z].*$/,
        /^.*[0-9].*$/
    ],
    '!regex': /password|123/
});

但实施这些可能会太多.



6> Jörn Zaeffer..:

正如addMethod文档中提到的:

请注意:虽然诱惑很大增加,检查是对值参数一个正则表达式的方法,它是干净多了封装自己的方法里面那些正则表达式.如果您需要许多略有不同的表达式,请尝试提取一个通用参数.正则表达式库:http://regexlib.com/DisplayPatterns.aspx

所以是的,你必须为每个正则表达式添加一个方法.开销很小,同时它允许你给正则表达式一个名字(不可低估),默认消息(方便)以及在不同地方重用它的能力,而不会反复重复正则表达式本身.



7> Kris Nobels..:

我让它像这样工作:

$.validator.addMethod(
    "regex",
    function(value, element, regexp) {
        return this.optional(element) || regexp.test(value);
    },
    "Please check your input."
);


$(function () {
    $('#uiEmailAdress').focus();
    $('#NewsletterForm').validate({
        rules: {
            uiEmailAdress:{
                required: true,
                email: true,
                minlength: 5
            },
            uiConfirmEmailAdress:{
                required: true,
                email: true,
                equalTo: '#uiEmailAdress'
            },
            DDLanguage:{
                required: true
            },
            Testveld:{
                required: true,
                regex: /^[0-9]{3}$/
            }
        },
        messages: {
            uiEmailAdress:{
                required: 'Verplicht veld',
                email: 'Ongeldig emailadres',
                minlength: 'Minimum 5 charaters vereist'
            },
            uiConfirmEmailAdress:{
                required: 'Verplicht veld',
                email: 'Ongeldig emailadres',
                equalTo: 'Veld is niet gelijk aan E-mailadres'
            },
            DDLanguage:{
                required: 'Verplicht veld'
            },
            Testveld:{
                required: 'Verplicht veld',
                regex: '_REGEX'
            }
        }
    });
});

确保正则表达式在/:-) 之间



8> Wiktor Strib..:

您可以使用文件中pattern定义的additional-methods.js.请注意, jQuery Validate依赖项之后必须包含此additional-methods.js文件,然后您可以使用

$("#frm").validate({
    rules: {
        Textbox: {
            pattern: /^[a-zA-Z'.\s]{1,40}$/
        },
    },
    messages: {
        Textbox: {
            pattern: 'The Textbox string format is invalid'
        }
    }
});



推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有