Измените шаблон регулярного выражения почтового индекса с помощью JS или Jquery в зависимости от выбранной страны

#javascript #html #jquery #forms

#язык JavaScript #HTML #jquery #формы

Вопрос:

Я могу вернуть ошибку проверки (HTML5), используя следующий скрипт, но теперь я не знаю, как «если/иначе, если» в зависимости от страны.

Цель Javascript/Jquery для проверки почтового индекса на основе выбора страны до отправки формы с использованием шаблонов проверки (99999 или A9A 9A9).

Если посетитель выберет НАС, установите шаблон для 99999. В противном случае, если вы выберете Канаду, установите шаблон для A9A 9A9.

 $('p.zip').each(function() {  $(this).find("input").prop('pattern', 'd{5}(?:-d{4})?|[a-zA-Z]d[a-zA-Z] ?d[a-zA-Z]d'); }); 
 lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;formgt;  lt;p class="country"gt;  lt;label class="field-label" for="13037"gt;Countrylt;/labelgt;  lt;select name="13037" id="13037" class="select" onchange=""gt;  lt;option value="" selected="selected"gt;lt;/optiongt;  lt;option value="47917"gt;USlt;/optiongt;  lt;option value="47919"gt;Canadalt;/optiongt;  lt;/selectgt;  lt;/pgt;  lt;p class="form-field group-contact col3 row3 form-row-half-sm zip pd-text required "gt;  lt;label class="field-label" for="13001"gt;Zip Codelt;/labelgt;  lt;input type="text" name="13001" id="13001" value="" class="text" size="30" maxlength="32" onchange="" onfocus=""gt;  lt;/pgt;  lt;buttongt;Submitlt;/buttongt; lt;/formgt; 

Ответ №1:

Вы хотите добавлять сброс валидатора каждый раз при изменении параметра «Выбор». Что-то вроде:

 function countryChanged() {  var countryId = $( this ).val();    var regexExp = 'd{5}(?:-d{4})?|[a-zA-Z]d[a-zA-Z] ?d[a-zA-Z]d';    switch(countryId)  {  case '47919' : regexExp = 'regex for CANADA here';  break;    }    changeValidator(regexExp);  }    function changeValidator(regexExp) {  $('p.zip').each(function() {  $(this).find("input").prop('pattern', regexExp);  });  }      $( "#13037" ).change(countryChanged);    countryChanged();  

Комментарии:

1. спасибо, что посмотрели на это. К сожалению, если посетитель не соответствует правилу проверки, он не сбрасывается. Только после того, как я обновлю страницу, она примет правильное значение.

Ответ №2:

У меня есть надежное решение на случай, если это кому-нибудь поможет

 // var zipPlaceholderFormat = 'xxxxx'; //default to US placeholder format var zipPattern = /^[0-9]{5}$/; //default to US regex format var zipErrorMessage = 'Please enter a valid zip code'  // by default, set the country to US if ($('p.country select').val() === '') {  $('p.country select').val($('p.country select option:contains("US")').val()); }  $('p.country select').change(function() {  // zipPlaceholderFormat = 'xxxxx'; //default to US placeholder format  zipPattern = /^[0-9]{5}$/; //default to US regex format  zipErrorMessage = 'Please enter a valid zip code'   switch ($(this).find('option:selected').text()) {  case 'Canada':  // zipPlaceholderFormat = 'A9A 9A9'  zipPattern = /^[A-Za-z][0-9][A-Za-z] [0-9][A-Za-z][0-9]$/;  zipErrorMessage = 'Please enter a valid postal code';  $('p.Province_Canada select').change();  break;  default: // US  $('p.state select').change();  }   // $('p.zip input').each(function() {  // $(this).prop('placeholder', zipPlaceholderFormat);  // }); }).change();  // checks the zip/postal code based on value provided by visitor $('p.zip input').change(function(event) {  var zipValue = $(this).val(); //get the current value from form  var match = zipValue.match(zipPattern)  $('p.zip span.error').remove();  if (zipValue amp;amp; match) {  $(this).removeClass('invalid');  } else if (!zipValue) {  $(this).removeClass('invalid');  } else {  $(this).parent().append('lt;span id="notify" class="error no-label text"gt;'   zipErrorMessage   'lt;/spangt;');  $(this).addClass('invalid');  } }).change(); 
 lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;formgt;  lt;p class="country"gt;  lt;label class="field-label" for="13037"gt;Countrylt;/labelgt;  lt;select name="13037" id="13037" class="select" onchange=""gt;  lt;option value="" selected="selected"gt;lt;/optiongt;  lt;option value="47917"gt;USlt;/optiongt;  lt;option value="47919"gt;Canadalt;/optiongt;  lt;/selectgt;  lt;/pgt;  lt;p class="form-field group-contact col3 row3 form-row-half-sm zip pd-text required "gt;  lt;label class="field-label" for="13001"gt;Zip Codelt;/labelgt;  lt;input type="text" name="13001" id="13001" value="" class="text" size="30" maxlength="32" onchange="" onfocus=""gt;  lt;/pgt;  lt;buttongt;Submitlt;/buttongt; lt;/formgt; 

ещё.