US / UK / validazione CA Codice postale in PHP
-
29-09-2019 - |
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.
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.