Это возможно передать переменную в строку образца регулярного выражения в 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');}
}
})
Да, вы можете, используя конструктор RegExp
:
var pattern = new RegExp("^[0-9]{"+i+"}$");
Но ... глядя на ваш код, кажется, что вы хотите убедиться, что текстовое поле содержит только числа , для что вы можете использовать простое регулярное выражение вроде этого:
var pattern = /^[0-9]+$/;
Вышеупомянутый шаблон будет соответствовать только строке, составленной из чисел, он будет искать:
^
[0-9]
+
$
$('#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;
}
});
Чтобы ответить на ваш вопрос, вы используете конструктор 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
Ваш цикл 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');
})