使用twitter bootstrap popover修复jquery验证插件中的正则表达式

时间:2013-04-18 17:41:09

标签: jquery twitter-bootstrap jquery-validate

我有这个代码,当有空格时显示一个弹出窗口。

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

 $('#validateForm').validate({
     rules: {
         product: {
             required: true,
             term: {regex: /^\s*$/}
         }
     },
     messages: {
         product: {
             required: "A text is much",
             term: "Please avoid spaces"
         },
     },  

     showErrors: function (errorMap, errorList) {

         $.each(this.successList, function (index, value) {
             $('#'+value.id+'').popover('destroy');
         });


         $.each(errorList, function (index, value) {

             $('#'+value.element.id+'').attr('data-content',value.message).popover({
                 placement: 'top',
                 trigger: 'manual'
             }).popover('show');

         });

     }

 });

发生的事情是,一旦没有空格,弹出窗口就不会被破坏。我做错了什么?

2 个答案:

答案 0 :(得分:1)

此正则表达式对空格和空字符串均有效。

如果您只想匹配空格,则应使用此正则表达式:/^\s+$/

答案 1 :(得分:0)

rules声明的结构如下......

rules: {                       // <- rules:
    field_name: {              // <- name attribute of field                   
        rule_name: parameter,  // <- rule: parameter
        required: true,   // example 1
        min: 30           // example 2
    }
},

现在你的代码:

rules: {
    product: {
        required: true,
        term: {regex: /^\s*$/}
    }
},

term到底应该是什么?为什么regex内有term

  • 如果term是规则,则无法将规则(regex)嵌套在规则(term)内。
  • term不是“内置”rule as per the documentation
  • 根据您的代码,
  • term也不是“自定义”规则。
  • 如果term是字段name,则无法在字段(term)中嵌套字段(product)。

假设你的正则表达式是正确的,它应该是这样的......

rules: {
    product: {
        required: true,
        regex: /^\s*$/
    }
},

另外,请记住,如果您的自定义方法返回true,则该字段会进行验证,如果它返回false,该字段将无法通过验证并显示错误。