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