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

5

在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个回答

10

是的,你可以使用 RegExp 构造函数实现:

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

不过...从您的代码看,似乎您想要确保文本框只包含数字,为此您可以使用一个简单的正则表达式,像这样:

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

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

  • 行首 ^
  • 匹配单个数字字符 [0-9]
    • 出现一次或更多次 +
  • 行尾 $

是的,我需要加号“+”。 - Philip007

5
今日免费次数已满, 请开通会员/明日再来
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

你能解释一下两个加号的意义吗? - Philip007
我想在每次键盘松开事件中验证邮编输入,而不是在所有字符都输入完后再验证。 - Philip007
1
非常整洁的脚本,其中 /^\d{5,}$/.test($('#zip').val()) ? 'none' : 'inline'。太棒了! - Philip007
@phil:两个加号只是字符串连接。它将“^[0-9]{”、i的内容和“}$”连接起来。如果i包含1,则结果为“^[0-9]{1}$”。 - Guffa

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;
            }
     });

0

你的 for 循环看起来相当可疑:

var i = $('#zip').val().length; for (i; i <= 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');
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接