正则表达式未显示正确的错误消息

时间:2017-04-20 16:20:06

标签: javascript jquery regex

我正在尝试使用字段rate_model的验证。我已经使用了Jquery验证。 rate_model应该接受两种格式

1. Number,number (if user enters only two number)
2. Number,number;number,number (if user enters more than two number it should be separated by ; (semicolon) )

这些是我的验证方案。

$(document).ready(function(){    
$.validator.addMethod("regex_rate",function(value, element, regexp) {          
        return this.optional(element) || regexp.test(value);  });
$("#frm_add_country").validate({
        rules: {
        rate_model: {
            required: true,
            regex_rate:/^([0-9],[0-9])|([0-9],[0-9];)$/
        }
    },
    messages: {
        rate_model: {
            required: "Please enter description",            
            regex_rate: "please enter (number,number) or (number,number);(number,number) ",            
        },        
    },
    submitHandler: function (form) {
        console.log("true");
    }
});
});

这是我的jquery验证

<form id="frm_add_country" name="frm_add_country" method="post">
<input type="text" id="rate_model" name="rate_model" class="form-control" >
</form>

这是我提交的表格

/^([0-9],[0-9])|([0-9],[0-9];)$/ 

这个正则表达式不能用于我预期的场景

2 个答案:

答案 0 :(得分:2)

这个正则表达式完成了这项工作

/^\d+,\d+(?:;\d+,\d+)*$/

<强>解释

/           : regex delimiter
  ^         : begining of string
    \d+     : 1 or more digits
    ,       : a comma
    \d+     : 1 or more digits
    (?:     : start non capture group
      ;     : a semicolumn
      \d+   : 1 or more digits
      ,     : a comma
      \d+   : 1 or more digits
    )*      : end group, 0 or more times
  $         : end of string
/           : regex delimiter

答案 1 :(得分:1)

@toto是正确的。
只有一次更正,如果还有更多的数字 - 15,16; 17,18; 19,20等 我们还需要在最后添加*。所以它将是

/ ^ \ d +,\ d +(:;?\ d +,\ d +)?* $ /

说明:

/           : regex delimiter  
  ^         : beginning of string  
    \d+     : 1 or more digits  
    ,       : a comma  
    \d+     : 1 or more digits  
    (?:     : start non capture group  
      ;     : a semicolon     
      \d+   : 1 or more digits  
      ,     : a comma
      \d+   : 1 or more digits  
     )*     : end group, one or more repetition  
    ?       : optional  
  $         : end of string  
/           : regex delimiter