我正在使用jQuery验证插件.好东西!我想迁移现有的ASP.NET解决方案以使用jQuery而不是ASP.NET验证器.我错过了正则表达式验证器的替代品.我希望能够做到这样的事情:
$("Textbox").rules("add", { regularExpression: "^[a-zA-Z'.\s]{1,40}$" })
如何添加自定义规则来实现此目的?
感谢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
你可以使用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/
我在制作一个jQuery正则表达式验证器时把所有部分放在一起有些麻烦,但我让它工作......这是一个完整的工作示例.它使用'验证'插件,可以在jQuery Validation Plugin中找到
没有理由将正则表达式定义为字符串.
$.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 },
这样更好,不是吗?
延伸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
时,必须重置属性.否则它将从与该正则表达式的最后一次匹配的位置开始验证,即使主题字符串不同.g
RegExp
我的其他一些想法是让你使用正则表达式的数组,以及另一个否定正则表达式的规则:
$("password").rules("add", { regex: [ /^[a-zA-Z'.\s]{8,40}$/, /^.*[a-z].*$/, /^.*[A-Z].*$/, /^.*[0-9].*$/ ], '!regex': /password|123/ });
但实施这些可能会太多.
正如addMethod文档中提到的:
请注意:虽然诱惑很大增加,检查是对值参数一个正则表达式的方法,它是干净多了封装自己的方法里面那些正则表达式.如果您需要许多略有不同的表达式,请尝试提取一个通用参数.正则表达式库:http://regexlib.com/DisplayPatterns.aspx
所以是的,你必须为每个正则表达式添加一个方法.开销很小,同时它允许你给正则表达式一个名字(不可低估),默认消息(方便)以及在不同地方重用它的能力,而不会反复重复正则表达式本身.
我让它像这样工作:
$.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' } } }); });
确保正则表达式在/
:-) 之间
您可以使用文件中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'
}
}
});