具有多个模式规则的jQuery表单validation插件

我正在使用jQueryValidation插件。 问题 :我想在一个输入字段中使用多个模式规则。 例如:

$("form").validate({ rules: { "email": { required: true, email: true }, "password": { required: true, pattern: /^[A-Za-z0-9\w]{4,20}/, pattern: /^[\d\w\xC4\xD6\xDC\xE4\xF6\xFC\xDF]*$/ } } }); 

会发生什么 :插件只测试第二个模式规则。 例如,输入类似“tst”的东西(因为这符合秒模式),虽然它违反了第一个模式规则。

据我了解此插件中规则的逻辑,所有规则都必须返回TRUE才能validation表单。

您不能使用相同的key:value对两次,因为第二个实例将覆盖第一个。

你有几个选择。

  • 将两个正则表达式组合成一个。 将使用一条错误消息声明一种方法。 因此,您将使用.addMethod()方法创建自己的自定义规则,而不是使用additional-methods.js文件中的pattern规则/方法。

  • 而不是组合正则表达式模式,使用pattern规则一次,并使用.addMethod()创建新的第二个规则。

请参阅: http : //jqueryvalidation.org/jQuery.validator.addMethod/


我将创建一个专用于每个正则表达式模式的自定义方法,并为其提供一个语义相关的名称 ,例如“email”,“phone”,“alphanumeric”,“IP”等。(这也是所有正则表达式的相同方式评估规则由此插件内部处理。)

 jQuery.validator.addMethod("foo", function(value, element) { return this.optional(element) || /^[A-Za-z0-9\w]{4,20}/.test(value); }, "Your entered data is not foo"); jQuery.validator.addMethod("bar", function(value, element) { return this.optional(element) || /^[\d\w\xC4\xD6\xDC\xE4\xF6\xFC\xDF]*$/.test(value); }, "Your entered data is not bar"); 

宣布像这样……

 "password": { required: true, foo: true, bar: true }