regex per codice postale


118

Possibile duplicato:
qual è il codice postale definitivo e la regex zip?

Ho bisogno di Regex che possa soddisfare tutte e tre le mie condizioni per il codice postale. Per esempio-

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

Eventuali suggerimenti e suggerimenti sarebbero molto apprezzati. Grazie !


4
La chiusura duplicata sembra imprecisa: il duplicato sta chiedendo un'espressione regolare che corrisponda a qualsiasi codice postale di qualsiasi nazione in assoluto, mentre questa domanda richiede una regex per abbinare i codici postali, che sono una cosa solo negli Stati Uniti, il che rende questa domanda molto ha un'estensione più ridotta della vittima - ma non v'è in realtà una risposta si trovano in vittima. Vedi stackoverflow.com/a/7185241/1709587 che elenca le espressioni regolari del codice postale Unicode CLDR (vecchio, ora deprecato, ma probabilmente ancora adeguato in molti casi) per> 100 paesi, inclusi gli Stati Uniti. La regex statunitense è \d{5}([ \-]\d{4})?.
Mark Amery

Risposte:


311
^\d{5}(?:[-\s]\d{4})?$
  • ^ = Inizio della stringa.
  • \d{5} = Corrisponde a 5 cifre (per le condizioni 1, 2, 3)
  • (?:…) = Raggruppamento
  • [-\s] = Trova uno spazio (per la condizione 3) o un trattino (per la condizione 2)
  • \d{4} = Corrisponde a 4 cifre (per la condizione 2, 3)
  • …? = Il modello prima di esso è facoltativo (per la condizione 1)
  • $ = Fine della stringa.

7
\scorrisponderà a qualsiasi spazio bianco, comprese le tabulazioni e le nuove righe.
mancanza di palpebre

1
Ciao che dire della condizione 123451234 senza spazio
Ajay Suwalka

4
@ProVega: Leggendo i commenti sulla risposta (ora cancellata) a cui ti sei collegato, sembra non essere corretto. Ad esempio, 00544è un codice postale valido; 544non è.
Keith Thompson

2
@AjaySuwalka: Tutto quello che dovresti fare per ospitare 123451234 senza spazio è posto a? dopo [- \ s], quindi diventerebbe: ^ \ d {5} (?: [- \ s]? \ d {4})? $
Grungondola

6
Un po 'tardi per la festa, e forse non è la campana più bella del ballo, ma ho aggiunto ulteriori spazi opzionali su entrambi i lati del trattino, soprattutto per l'estetica. /(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel

4

Solo per le tre condizioni elencate, queste espressioni potrebbero funzionare anche:

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

Si prega di vedere questa demo per ulteriori spiegazioni.

Se avessimo spazi aggiuntivi imprevisti tra 5 e 4 cifre o un codice postale continuo di 9 cifre, come:

123451234
12345 1234
12345  1234

questa espressione, ad esempio, sarebbe un'opzione secondaria con meno vincoli:

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

Si prega di vedere questa demo per ulteriori spiegazioni.

Circuito RegEx

jex.im visualizza espressioni regolari:

inserisci qui la descrizione dell'immagine

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

So che questo può essere ovvio per la maggior parte delle persone che usano RegEx frequentemente, ma nel caso in cui qualche lettore fosse nuovo di RegEx, ho pensato di segnalare un'osservazione che ho fatto che è stata utile per uno dei miei progetti.

In una precedente risposta di @kennytm:

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

...? = Il modello prima di esso è facoltativo (per la condizione 1)

Se vuoi consentire sia i codici postali standard a 5 cifre che quelli +4, questo è un ottimo esempio.

Per abbinare solo i codici postali nel formato "Zip + 4" degli Stati Uniti come dovevo fare (solo condizioni 2 e 3), rimuovi semplicemente l'ultimo in ?modo che corrisponda sempre all'ultimo gruppo di 5 caratteri.

Uno strumento utile che consiglio per armeggiare con RegEx è collegato di seguito:

https://regexr.com/

Uso spesso questo strumento quando trovo che RegEx fa qualcosa di simile a ciò di cui ho bisogno, ma potrebbe essere adattato un po 'meglio. Ha anche un elegante menu di riferimento RegEx e un'interfaccia informativa che ti tiene informato su come le tue modifiche influiscono sulle corrispondenze per il testo di esempio che hai inserito.

Se ho sbagliato qualcosa o ho perso un'informazione importante, correggimi.


oppure puoi fare riferimento a questo tutorial regex - youtube.com/watch?v=8uCHRyK_VMo
Krishnraj Rana
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.