wyrażenie regularne dla kodu pocztowego


118

Możliwy duplikat:
Jaki jest ostateczny kod pocztowy i wyrażenie regularne zip?

Potrzebuję Regex, który może spełnić wszystkie moje trzy warunki dotyczące kodu pocztowego. Na przykład-

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

Wszelkie wskazówki i sugestie będą mile widziane. Dzięki !


4
Duplikat zamknięcia wygląda na szkicowy - dupe prosi o wyrażenie regularne, które będzie pasować do dowolnego kodu pocztowego z dowolnego kraju, podczas gdy to pytanie dotyczy wyrażenia regularnego pasującego do kodów pocztowych, które są dostępne tylko w USA, co sprawia, że ​​to pytanie jest bardzo węższy zakres niż w dupe - ale tam jest w rzeczywistości odpowiedź można znaleźć w dupe. Zobacz stackoverflow.com/a/7185241/1709587, który zawiera listę wyrażeń regularnych kodów pocztowych Unicode CLDR (stary, obecnie przestarzały, ale prawdopodobnie nadal wystarczający w wielu przypadkach) dla> 100 krajów, w tym USA. Amerykańskie wyrażenie regularne to \d{5}([ \-]\d{4})?.
Mark Amery,

Odpowiedzi:


311
^\d{5}(?:[-\s]\d{4})?$
  • ^ = Początek łańcucha.
  • \d{5} = Dopasuj 5 cyfr (dla warunku 1, 2, 3)
  • (?:…) = Grupowanie
  • [-\s] = Dopasuj spację (dla warunku 3) lub łącznik (dla warunku 2)
  • \d{4} = Dopasuj 4 cyfry (dla warunku 2, 3)
  • …? = Wzorzec przed nim jest opcjonalny (dla warunku 1)
  • $ = Koniec ciągu.

7
\sdopasuje wszelkie białe znaki, w tym tabulatory i nowe linie.
powiek

1
Witam co ze stanem 123451234 bez spacji
Ajay Suwalka

4
@ProVega: Czytając komentarze do (teraz usuniętej) odpowiedzi, do której masz łącze, wydaje się, że jest to nieprawidłowe. Na przykład 00544to prawidłowy kod pocztowy; 544nie jest.
Keith Thompson,

2
@AjaySuwalka: Wszystko, co musiałbyś zrobić, aby pomieścić 123451234 bez miejsca, to miejsce? po [- \ s], więc będzie to: ^ \ d {5} (?: [- \ s]? \ d {4})? $
Grungondola

6
Trochę późno na imprezę i może nie najładniejszy dzwonek na balu, ale dodałem dodatkowe opcjonalne spacje po obu stronach łącznika - głównie ze względu na estetykę. /(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel

4

Tylko dla wymienionych trzech warunków te wyrażenia mogą również działać:

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

Zobacz to demo, aby uzyskać dodatkowe wyjaśnienia.

Gdybyśmy mieli nieoczekiwane dodatkowe spacje między 5 a 4 cyframi lub ciągły 9-cyfrowy kod pocztowy, taki jak:

123451234
12345 1234
12345  1234

na przykład to wyrażenie byłoby opcją drugorzędną z mniejszymi ograniczeniami:

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

Zobacz to demo, aby uzyskać dodatkowe wyjaśnienia.

RegEx Circuit

jex.im wizualizuje wyrażenia regularne:

wprowadź opis obrazu tutaj

Test

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

Wiem, że może to być oczywiste dla większości ludzi, którzy często używają RegEx, ale w przypadku, gdy jacyś czytelnicy są nowicjuszami w RegEx, pomyślałem, że powinienem zwrócić uwagę na obserwację, która była pomocna w jednym z moich projektów.

W poprzedniej odpowiedzi od @kennytm:

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

…? = Wzorzec przed nim jest opcjonalny (dla warunku 1)

Jeśli chcesz zezwolić na standardowe 5-cyfrowe i +4 kody pocztowe, jest to świetny przykład.

Aby dopasować tylko kody pocztowe w amerykańskim formacie „Zip + 4”, tak jak potrzebowałem (tylko warunki 2 i 3), po prostu usuń ostatni, ?aby zawsze pasował do ostatniej grupy 5 znaków.

Przydatne narzędzie, które polecam do majstrowania przy RegEx, znajduje się poniżej:

https://regexr.com/

Często używam tego narzędzia, gdy znajduję RegEx, które robi coś podobnego do tego, czego potrzebuję, ale może być nieco lepiej dostosowane. Ma również sprytne menu referencyjne RegEx i interfejs informacyjny, który informuje Cię o tym, jak Twoje zmiany wpływają na dopasowania dla wprowadzonego przykładowego tekstu.

Jeśli coś jest nie tak lub przeoczyłem ważną informację, popraw mnie.


lub możesz
polecić
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.