Передайте переменную строке образца регулярного выражения в jQuery

Это возможно передать переменную в строку образца регулярного выражения в 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');}
   }
 })
5
задан Silvio Donnini 12 June 2010 в 08:49
поделиться

4 ответа

Да, вы можете, используя конструктор RegExp :

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

Но ... глядя на ваш код, кажется, что вы хотите убедиться, что текстовое поле содержит только числа , для что вы можете использовать простое регулярное выражение вроде этого:

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

Вышеупомянутый шаблон будет соответствовать только строке, составленной из чисел, он будет искать:

  • Начало строки ^
  • Соответствует однозначному символу [0-9]
    • От одного до неограниченного количества раз +
  • Конец строки $
10
ответ дан 18 December 2019 в 11:53
поделиться
$('#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
ответ дан 18 December 2019 в 11:53
поделиться

Чтобы ответить на ваш вопрос, вы используете конструктор 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
5
ответ дан 18 December 2019 в 11:53
поделиться

Ваш цикл 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');
})
0
ответ дан 18 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: