Regex для почтового индекса
Возможный дубликат:
Что такое конечный почтовый индекс и регулярное выражение zip?
Мне нужно Regex, которое может удовлетворить все мои три условия для почтового кода. Например,
- 12345
- 12345-6789
- 12345 1234
Любые указатели и предложения будут высоко оценены. Спасибо!
Ответы
Ответ 1
^\d{5}(?:[-\s]\d{4})?$
-
^
= Начало строки.
-
\d{5}
= совместить 5 цифр (для условия 1, 2, 3)
-
(?:…)
= Группировка
-
[-\s]
= сопоставить пробел (для условия 3) или дефис (для условия 2)
-
\d{4}
= Соответствует 4 цифрам (для условия 2, 3)
-
…?
= Шаблон перед его необязательным (для условия 1)
-
$
= Конец строки.
Ответ 2
Только для перечисленных трех условий эти выражения могут также работать:
^\d{5}[-\s]?(?:\d{4})?$
^\[0-9]{5}[-\s]?(?:[0-9]{4})?$
^\[0-9]{5}[-\s]?(?:\d{4})?$
^\d{5}[-\s]?(?:[0-9]{4})?$
Если бы у нас были неожиданные дополнительные пробелы между 5 и 4 цифрами или непрерывный 9-значный почтовый индекс, такой как:
123451234
12345 1234
12345 1234
это выражение, например, будет вторичной опцией с меньшими ограничениями:
^\d{5}([-]|\s*)?(\d{4})?$
RegEx Circuit
jex.im визуализирует регулярные выражения:
![enter image description here]()
Тестовое задание
const regex = /^\d{5}[-\s]?(?:\d{4})?$/gm;
const str = '12345
12345-6789
12345 1234
123451234
12345 1234
12345 1234
1234512341
123451';
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the 'm'-variable.
m.forEach((match, groupIndex) => {
console.log('Found match, group ${groupIndex}: ${match}');
});
}