Regex für Postleitzahl

118

Mögliches Duplikat:
Was ist die ultimative Postleitzahl und Postleitzahl?

Ich brauche Regex, das alle meine drei Bedingungen für die Postleitzahl erfüllen kann. Z.B-

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

Alle Hinweise und Vorschläge wäre sehr dankbar. Vielen Dank !

Shaitender Singh
quelle
4
Der doppelte Verschluss sieht lückenhaft aus - der Betrüger fragt nach einer Regex, die mit jeder Postleitzahl einer Nation übereinstimmt, während diese Frage nach einer Regex fragt, die mit Postleitzahlen übereinstimmt, die nur in den USA erhältlich sind, was diese Frage sehr macht schmaler im Umfang als der Betrüger - aber es gibt tatsächlich eine Antwort beim Betrüger. Siehe stackoverflow.com/a/7185241/1709587, in dem die Postleitzahlen der Unicode-CLDRs (alt, jetzt veraltet, aber wahrscheinlich in vielen Fällen immer noch ausreichend) für> 100 Länder, einschließlich der USA, aufgeführt sind. Die US-Regex ist \d{5}([ \-]\d{4})?.
Mark Amery

Antworten:

310
^\d{5}(?:[-\s]\d{4})?$
  • ^ = Anfang der Zeichenfolge.
  • \d{5} = Übereinstimmung mit 5 Ziffern (für Bedingung 1, 2, 3)
  • (?:…) = Gruppierung
  • [-\s] = Entspricht einem Leerzeichen (für Bedingung 3) oder einem Bindestrich (für Bedingung 2)
  • \d{4} = Übereinstimmung mit 4 Ziffern (für Bedingung 2, 3)
  • …? = Das Muster davor ist optional (für Bedingung 1)
  • $ = Ende der Zeichenfolge.
kennytm
quelle
7
\spasst zu allen Leerzeichen, einschließlich Tabulatoren und neuen Zeilen.
Augenlidlosigkeit
1
Hallo, was ist mit dem Zustand 123451234 ohne Platz
Ajay Suwalka
4
@ProVega: Das Lesen der Kommentare zu der (jetzt gelöschten) Antwort, auf die Sie verlinkt haben, scheint falsch zu sein. Ist beispielsweise 00544eine gültige Postleitzahl; 544ist nicht.
Keith Thompson
2
@ AjaySuwalka: Alles, was Sie tun müssten, um 123451234 ohne Platz unterzubringen, ist Platz a? nach [- \ s], so würde es werden: ^ \ d {5} (?: [- \ s]? \ d {4})? $
Grungondola
6
Ein bisschen zu spät zur Party und vielleicht nicht die schönste Glocke am Ball, aber ich habe zusätzliche optionale Leerzeichen auf beiden Seiten des Bindestrichs hinzugefügt - hauptsächlich aus ästhetischen Gründen. /(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel
4

Nur für die aufgeführten drei Bedingungen funktionieren diese Ausdrücke möglicherweise auch:

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

Weitere Erklärungen finden Sie in dieser Demo.

Wenn wir unerwartete zusätzliche Leerzeichen zwischen 5 und 4 Stellen oder eine fortlaufende 9-stellige Postleitzahl gehabt hätten, wie zum Beispiel:

123451234
12345 1234
12345  1234

Dieser Ausdruck wäre beispielsweise eine sekundäre Option mit weniger Einschränkungen:

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

Weitere Erklärungen finden Sie in dieser Demo.

RegEx Circuit

jex.im visualisiert reguläre Ausdrücke:

Geben Sie hier die Bildbeschreibung ein

Prüfung

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

Emma
quelle
0

Ich weiß, dass dies für die meisten Leute, die RegEx häufig verwenden, offensichtlich sein mag, aber falls Leser neu in RegEx sind, dachte ich, ich sollte auf eine Beobachtung hinweisen, die ich gemacht habe und die für eines meiner Projekte hilfreich war.

In einer früheren Antwort von @kennytm:

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

…? = Das Muster davor ist optional (für Bedingung 1)

Wenn Sie sowohl standardmäßige 5-stellige als auch +4 Postleitzahlen zulassen möchten, ist dies ein gutes Beispiel.

Um nur Postleitzahlen im US-Format 'Postleitzahl + 4' zu finden, wie ich es tun musste (nur Bedingungen 2 und 3), entfernen Sie einfach die letzte, ?damit sie immer mit der letzten 5-Zeichen-Gruppe übereinstimmt.

Ein nützliches Tool, das ich zum Basteln mit RegEx empfehle, ist unten verlinkt:

https://regexr.com/

Ich benutze dieses Tool häufig, wenn ich RegEx finde, das etwas Ähnliches tut, was ich brauche, aber etwas besser angepasst werden könnte. Es hat auch ein raffiniertes RegEx-Referenzmenü und eine informative Oberfläche, die Sie darüber informiert, wie sich Ihre Änderungen auf die Übereinstimmungen mit dem von Ihnen eingegebenen Beispieltext auswirken.

Wenn ich etwas falsch gemacht oder eine wichtige Information verpasst habe, korrigieren Sie mich bitte.

NjalTheKnut
quelle
oder Sie können dieses Regex-Tutorial
lesen