Jquery Form Validator多个正则表达式问题

时间:2014-06-11 11:12:59

标签: jquery regex jquery-validate

我想在表单的密码字段中添加多种类型的正则表达式。我已经完成了以下工作。问题是,当我输入内容时,即使我在字段中输入了小写字母和数字,也会给出错误消息。

  $.validator.addMethod "LowserCase", ((value, element, regexp) ->
    return this.optional(element) || /[a-z]+/.test(value);
  ), "Password should have atleast one lowercase letter"

  $.validator.addMethod "Uppercase", ((value, element, regexp) ->
    return this.optional(element) || /[A-Z]+/.test(value);
  ), "Password should have atleast one uppercase letter"

  $.validator.addMethod "Digit", ((value, element, regexp) ->
    return this.optional(element) || /[0-9 -()+]+$/.test(value);
  ), "Password should have atleast one digit"

$("#user_password").rules "add",
  required: true
  minlength: 8
  Uppercase: true
  Digit: true
  LowserCase: true

你能告诉我为什么会这样吗? ?或者我如何验证多个正则表达式并显示不同的错误消息

由于

此致

2 个答案:

答案 0 :(得分:1)

你的问题根本与正则表达式无关。你有很多语法问题,我不确定这些问题是如何解决的。你错过了各种标点符号,比如括号,大括号,逗号和单词function本身。


您的.rules()方法......

$("#user_password").rules "add",
  required: true
  minlength: 8
  Uppercase: true
  Digit: true
  LowserCase: true

看起来应该是这样......

$("#user_password").rules("add", {  // <-- opening braces and parenthesis
    required: true,   // <-- a comma after ever rule
    minlength: 8,
    Uppercase: true,
    Digit: true,
    LowserCase: true
});   // <-- closing braces and parenthesis

请参阅:http://jqueryvalidation.org/rules/


您的每个自定义方法都存在类似的问题....

$.validator.addMethod "LowserCase", ((value, element, regexp) ->
    return this.optional(element) || /[a-z]+/.test(value);
), "Password should have atleast one lowercase letter"

应该......

$.validator.addMethod("LowserCase", function(value, element) {
    return this.optional(element) || /[a-z]+/.test(value);
}, "Password should have atleast one lowercase letter" );

请查看大括号和括号的确切位置以及单词function的用法。您也不需要将第三个参数(regexp)传递给函数,因为您没有在函数中使用它。

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

(注意,"Lower"函数名称中的单词"LowerCase"拼写错误为"Lowser",尽管您的代码正常工作,因为在使用此LowserCase拼写错误时您保持一致另请注意,没有"atleast"这样的单词; 总是拼写为两个单词"at least"。)


工作演示:http://jsfiddle.net/WCq27/


修改

Digit规则的正则表达式应更改为此...

/[0-9]+/.test(value);

新版DEMO:http://jsfiddle.net/WCq27/1/

答案 1 :(得分:0)

您可以尝试针对类创建验证规则。您可以为特定类添加规则,如下所示:

$.validator.addMethod(      // add a validation method
    'letterSpaceFieldRegEx',
    function (value) {
        return /^([a-zA-Z\ ])*$/.test(value); // only letters and space
    },
    '* Only letters'
);
jQuery.validator.addClassRules('letterField', { // custom rule for class 'letterField'
    letterSpaceFieldRegEx: true
});

现在您可以使用“letterField”类进行验证。

如:

$("#user_password").addClass('letterField');