регулярное выражение для почтового индекса


118

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

Мне нужно Regex, который может удовлетворить все три моих условия для почтового индекса. Например-

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

Любые указатели и предложения будут очень признательны. Спасибо !


4
Двойное закрытие выглядит отрывочно - обманщик запрашивает регулярное выражение, которое будет соответствовать любому почтовому индексу любой страны, тогда как этот вопрос просит регулярное выражение для соответствия почтовым индексам, которые являются только для США, что делает этот вопрос очень большим более узким по объему , чем боян - но это на самом деле ответ можно найти на боян. См stackoverflow.com/a/7185241/1709587 , которые перечислены (старые, теперь устаревшие, но , вероятно , до сих пор адекватные во многих случаях) почтовых индексы регулярных выражений в Unicode CLDR для> 100 стран мира, включая США. Регулярное выражение США - это \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будет соответствовать любому пробелу, включая табуляцию и новые строки.
век 05

1
Привет, что насчет состояния 123451234 без пробела
Аджай Сувалка

4
@ProVega: Чтение комментариев к (теперь удаленному) ответу, на который вы ссылались, кажется неправильным. Например, 00544это действительный почтовый индекс; 544не является.
Кейт Томпсон

2
@AjaySuwalka: Все, что вам нужно сделать, чтобы разместить 123451234 без места, - это разместить? после [- \ s], так что это будет: ^ \ d {5} (?: [- \ s]? \ d {4})? $
Grungondola

6
Немного поздно на вечеринку и, возможно, не самый красивый звонок на балу, но я добавил дополнительные необязательные пробелы по обе стороны от дефиса - в основном для эстетики. /(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Биррель

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

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 и информативный интерфейс, который позволяет вам знать, как ваши изменения влияют на совпадения с образцом текста, который вы ввели.

Если я ошибся или пропустил важную информацию, поправьте меня.


или вы можете обратиться к этому руководству по регулярным выражениям - youtube.com/watch?v=8uCHRyK_VMo
Кришнрадж Рана
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.