регулярний вираз для поштового індексу


118

Можливий дублікат:
Що таке кінцевий поштовий індекс та поштовий індекс?

Мені потрібен Regex, який може задовольнити всі три мої умови для поштового індексу. Наприклад,

  1. 12345
  2. 12345-6789
  3. 12345 1234

Будь-які вказівки та пропозиції були б вдячні. Дякую !


4
Дублікат закриття виглядає схематичним - дуп просить повторно виразити, який буде відповідати будь-якому поштовому індексу від будь-якої країни коли-небудь, тоді як це питання просить регулярний вирівнювання поштових індексів, які є єдиною для США справою, що робить це питання сильним більш вузьким за обсягом , ніж боян - але це насправді відповідь можна знайти на боян. Див. Stackoverflow.com/a/7185241/1709587, де перераховано Unicode CLDR (старий, тепер застарілий, але, мабуть, ще достатній у багатьох випадках). Регекс США є \d{5}([ \-]\d{4})?.
Марк Амері

Відповіді:


311
^\d{5}(?:[-\s]\d{4})?$
  • ^ = Початок рядка.
  • \d{5} = Збіг 5 цифр (для умови 1, 2, 3)
  • (?:…) = Групування
  • [-\s] = Збіг пробілу (для умови 3) або дефісу (для умови 2)
  • \d{4} = Збіг 4 цифр (для умови 2, 3)
  • …? = Шаблон, перш ніж він не є обов'язковим (для умови 1)
  • $ = Кінець рядка.

7
\sвідповідатиме будь-якому пробілу, включаючи вкладки та нові рядки.
безвічність

1
Привіт, що з умовою 123451234 без місця
Ajay Suwalka

4
@ProVega: Читання коментарів до (зараз видаленої) відповіді, з якою ви пов’язані, виявляється невірною. Наприклад, 00544є дійсним поштовим індексом; 544не.
Кіт Томпсон

2
@AjaySuwalka: Все, що вам доведеться зробити, щоб розмістити 123451234 без місця, це місце? після [- \ s], то воно стане: ^ \ d {5} (?: [- \ s]? \ d {4})? $
Грунгондола

6
Трохи запізнюємось на вечірку, і, можливо, не найкрасивіший дзвіночок на балі, але я додав додаткові додаткові місця з обох боків дефісу - переважно для естетики. /(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel

4

Тільки для перерахованих трьох умов ці вирази можуть також працювати:

^\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 візуалізує регулярні вирази:

введіть тут опис зображення

Тест

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}`);
    });
}


0

Я знаю, що це може бути очевидним для більшості людей, які користуються RegEx часто, але у випадку, якщо хтось із читачів не знайомий з RegEx, я подумав, що слід зазначити зроблене нами спостереження, яке було б корисним для одного з моїх проектів.

У попередній відповіді від @kennytm:

^\d{5}(?:[-\s]\d{4})?$

…? = Шаблон, перш ніж він не є обов'язковим (для умови 1)

Якщо ви хочете дозволити як стандартні 5-значний, так і +4 поштові індекси, це чудовий приклад.

Щоб відповідати лише поштовим кодам у американському форматі "Zip + 4", як мені потрібно було зробити (лише умови 2 та 3), просто видаліть останній, ?щоб він завжди відповідав останній 5 символьній групі.

Нижче наведено корисний інструмент, який я рекомендую для поводження з RegEx:

https://regexr.com/

Я часто використовую цей інструмент, коли знаходжу RegEx, який робить щось подібне до того, що мені потрібно, але може бути адаптований трохи краще. Він також має чудове довідкове меню RegEx та інформаційний інтерфейс, який дозволяє вам знати, як ваші зміни впливають на відповідність зразка тексту, який ви ввели.

Якщо я щось помилився або пропустив важливу інформацію, будь ласка, виправте мене.


або ви можете посилатися на цей підручник з регулярними
виразками
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.