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

时间:2010-06-12 07:34:38

标签: jquery regex

是否可以将变量传递给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');}
   }
 })

4 个答案:

答案 0 :(得分:10)

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

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

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

var pattern = /^[0-9]+$/;

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

  • ^
  • 的开头
  • 匹配单个数字字符[0-9]
    • 在一次和无限次+
    • 之间
  • 行尾$

答案 1 :(得分:5)

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

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

然而,代码并没有多大意义。当你在循环中的每次迭代中更改样式时,只会显示最后一次迭代的结果。

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

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

正则表达式内容:

^ = start of string
\d = same as [0-9]
{5,} = repeat five or more times
$ = end of string

答案 2 :(得分:0)

$('#zip').keyup( function(){ 
     var zip= $('#zip').val();
     var pattern = /^[0-9]+$/;
     if (zip.length >0 && zip.match(pattern)) {
                // write your code
                return true;
            }
          else {
                // write your code
                return false;
            }
     });

答案 3 :(得分:0)

你的for循环看起来很可疑:

var i = $('#zip')。val()。length; for(i; i&lt; = 5; i ++) {

}

为什么在字符串结束后开始?

难道你不想要这个吗?:

$('#zip').keyup(function() {  
    var pattern = /^[0-9]*$/;  
    if(!pattern.test($('#zip').val()))
        $('#zip_error').css('display','inline'); 
    else
        $('#zip_error').css('display','none');
})