是否可以将变量传递给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]
+$要回答您的问题,请使用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)
| 归档时间: |
|
| 查看次数: |
12634 次 |
| 最近记录: |