Domanda

Im non così buono con regex. Im cercando di aggiungere una funzione di validazione che restituirà true / false se la stringa è entrato in esso è un Uniti, Regno Unito, o CA zip codice valido / postale.

USA: NNNNN CA: LNL NLN UK: un sacco di combinazioni

L = lettera, N = Numero

Ci sono singole funzioni per noi, e il Canada, ma non sono riuscito a trovare una sola funzione unificato per fare questo.

È stato utile?

Soluzione

Date un'occhiata al Zend_Validate_Postcode dal Zend Framework :

  

Zend_Validate_PostCode consente di   determinare se un dato valore è un valido   codice postale. Codici postali sono specifici   alle città, e in alcuni locali definito   Codici di avviamento postale.

     

Zend_Validate_PostCode   sa più di 160 differenti postale   formates codice. Per selezionare la corretta   formato ci sono 2 modi. Puoi   utilizzare un locale completo o   è possibile impostare manualmente il proprio formato.

Credo che si potrebbe o guardare il sorgente, o utilizzarlo come componente stand-alone. Può avere dipendenze all'interno della ZF, ma non sarà certamente bisogno di utilizzare l'intero quadro solo per questo componente. Speranza che aiuta.

Altri suggerimenti

La mia soluzione sarebbe quella di andare per tre regex separati utilizzando gli operatori logici OR:

if (
    preg_match('/^\d{5}(?:\-\d{4})?$/i', $code, $matches) OR
    preg_match('/^[a-z]\d[a-z] ?\d[a-z]\d$/i', $code, $matches) OR
    preg_match('/^[a-z]{1,2}\d{1,2} ?\d[a-z]{2}$/i', $code, $matches)
) {
    // deal with $matches here
}

Nota che questo funziona perché PHP usa la logica di corto circuito. Una volta che un test è passato, gli altri vengono ignorati in modo $matches non sarà sovrascritto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top