正则表达式排除某些字符

时间:2014-08-23 11:53:59

标签: jquery regex jquery-validate

我试图使用JQuery Validate来使用正则表达式模式来检测3个字符I,O或Q(不区分大小写)是否在17个字符的字符串字母数字字符串中然后出现错误。当字符串完全包含这些字符时,我能够检测到这些字符,例如qqqqqqqqqqqqqqqqq,但是单个或多次出现例如bbbbbbbbbbbbbbbqq似乎没有被检测到。

我尝试使用的代码如下,我认为正则表达式是合理的直接 -

regex: "[^ioq]/i"  

然而,这似乎并不完全有效,我使用的完整javascript是

<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script type="text/javascript">
    $.validator.addMethod(
            "regex",
            function(value, element, regexp) {
                var re = new RegExp(regexp);
                return this.optional(element) || re.test(value);
            },
            "Please check your input."
    );
    $("#navbar").validate({
      onfocusout: true,
      onkeyup: false,    
      rules: {
        VIN: {
          required: true,              
          minlength: 17,
          maxlength: 17,
          regex: "[^ioq]/i" 
        }
      },
      messages: {
        VIN: {
          required: "Please provide a VIN",
          regex: "A VIN excludes letters I, O and Q",
          minlength: "Enter a 17 character VIN",
          maxlength: "Enter a 17 character VIN",
        }
      },

小提琴示例 - http://jsfiddle.net/f07mz4x0/

1 个答案:

答案 0 :(得分:1)

你需要在这里使用负向前瞻来检测单个阻塞字符的存在,如下所示:

/^(?![^ioq]*[ioq])[a-z0-9]{17}$/i 

此处(?![^ioq]*[ioq])是否定前瞻,当输入甚至只出现一次字母[a-z]{17}(不区分大小写)时,会阻止匹配i, o or q