Я заметил что-то странное с моим кодом. У меня есть регулярное выражение для проверки почтовых индексов Великобритании, оно использует группы захвата и работает нормально, если только не в операторе if. Код для проверки находится в классе валидатора, которому передается список узлов HTML со всеми полями из формы.
Например, когда я использую его в теге pattern
на входе HTML поле это действует так, как вы ожидаете. Как и когда я console.log(regex.test(field.value))
. Тем не менее, когда я помещаю его в выражение if, оно каждый раз кажется неудачным.
Регулярное выражение выглядит следующим образом:
/\b([a-zA-Z]{1,2}[0-9]{1,2}[a-zA-Z]?){1}( |-)?([0-9]{1,2}[a-zA-Z]{1,2}){1}\b/
Поле ввода выглядит следующим образом:
<input required pattern="\b([a-zA-Z]{1,2}[0-9]{1,2}[a-zA-Z]?){1}( |-)?([0-9]{1,2}[a-zA-Z]{1,2}){1}\b" inputmode="text" class="form-field" type="text" name="postcode" id="contactPostcode" placeholder="Postcode eg NW2 8BZ" />
Код для проверки следующий:
validate(fields)
// ... omitted ... //
let errors = [];
const postcodeRegex = /\b([a-zA-Z]{1,2}[0-9]{1,2}[a-zA-Z]?){1}( |-)?([0-9]{1,2}[a-zA-Z]{1,2}){1}\b/;
postcodeRegex.lastIndex = 0;
for (let field of fields) {
if(field.name === 'postcode') {
console.log(postcodeRegex.test(field.value))
if(!postcodeRegex.test(field.value)) {
errors.push({
field: field.getAttribute('name'),
error: 'Illegal character detected'
});
continue;
}
}
}
Проверка console.log возвращает значение true, однако проверка оператора if каждый раз возвращает значение false, и я не понимаю, почему две идентичные проверки будут давать разные результаты, есть ли у кого-нибудь совет? Я предполагаю, что что-то происходит над моей головой здесь.
Спасибо
Редактировать для пояснения: лог консоли true
, но оператор if все еще выполняется