将变量传递给jquery中的正则表达式模式字符串

Phi*_*007 5 regex jquery

是否可以将变量传递给jquery(或javascript)中的正则表达式模式字符串?例如,我想每次在用户通过将变量i传递给正则表达式模式键入字符时验证邮政编码输入字段.怎么做对了?

 $('#zip').keyup( function(){ 
 var  i=$('#zip').val().length
 for ( i; i<=5; i++){   
            var pattern=/^[0-9]{i}$/;  
     if ( !pattern.test(   $('#zip').val()   )    )
                {$('#zip_error').css('display','inline');}   
     else
         {$('#zip_error').css('display','none');}
   }
 })
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 10

是的,您可以使用RegExp构造函数:

var pattern = new RegExp("^[0-9]{"+i+"}$");
Run Code Online (Sandbox Code Playgroud)

但是......看看你的代码似乎要确保文本框包含数字,因为你可以使用这样的简单正则表达式:

var pattern = /^[0-9]+$/;
Run Code Online (Sandbox Code Playgroud)

上面的模式只匹配由数字组成的字符串,它将寻找:

  • 开始一行 ^
  • 匹配单个数字字符 [0-9]
    • 在一个和无限的时间之间 +
  • 行结束 $


Guf*_*ffa 5

要回答您的问题,请使用Regexp构造函数,以便您可以使用字符串作为模式:

var pattern = new Regexp("^[0-9]{" + i + "}$");
Run Code Online (Sandbox Code Playgroud)

但是,代码并没有真正意义.当您在循环中的每次迭代中更改样式时,仅显示最后一次迭代的结果.

如果要检查该值是否仅包含数字且至少包含五个字符,则只需在模式中指定:

$('#zip').keyup(function(){
  $('#zip_error').css(
    'display',
    /^\d{5,}$/.test($('#zip').val()) ? 'none' : 'inline'
  );
})
Run Code Online (Sandbox Code Playgroud)

正则表达内容:

^ = start of string
\d = same as [0-9]
{5,} = repeat five or more times
$ = end of string
Run Code Online (Sandbox Code Playgroud)