2012-09-23 14 views
5

Ho un modulo di zend dove ho un campo del numero di telefono e devo controllare per il validatore.Qual è l'espressione regolare per la convalida del numero di telefono internazionale in php o zend?

Ho deciso di usare un'espressione regolare per quello. Ho cercato su google ma i risultati che ho non funzionano.

Qualcuno può fornirmi l'espressione regolare. Ecco il mio codice:

$phone = new Zend_Form_Element_Text('phone'); 
      $phone->setRequired(true); 
      $phone->setLabel('Phone :') 
      ->addFilter('StripTags') 
      ->addValidator('NotEmpty', false, array('messages'=>'phone cannot be empty')) 
      ->addFilter('StringTrim') 
      ->addValidator('regex', false, array('/^[0-9 ]+$/','messages'=>'not a valid phone number')) 
      ->addValidator('StringLength', false, array(5, 25, 'messages'=>'phone must be 5-25 character')) 

Grazie in anticipo

+0

@Gabber, ho cercato un bel po 'ma quelli non stanno funzionando. Ecco perché ho postato la domanda. L'errore che stavo facendo è che non stavo usando il '/' all'inizio e alla fine dell'espressione. Che ho imparato dalla risposta fornita dall'utente1559230. Grazie per il tuo commento Gabber. Lo ricorderò sicuramente per la prossima volta. – ehp

+0

Grazie per la cortese risposta :) – Gabber

risposta

3
/^((\+|00)\d{1,3})?\d+$/ 

Prova l'espressione di cui sopra. spero che questo ti aiuti.

+0

Risolve il mio problema. Grazie @ user1559230. – ehp

+0

Qual è il punto del '\ d {1,3}'? So che corrisponde 1-3 cifre, ma per qualsiasi numero con almeno 3 cifre (seguendo l'opzionale '00'), corrisponderà tutti e 3 di loro. Ad esempio, dato '+ 18005551212',' \ d {1,3} 'corrisponde a' 180', che non ha senso. E la tua regexp rifiuta i numeri con spazi e trattini integrati; è questo il tuo intento? –

2

Si noti che il numero di telefono è uno dei più duri convalida dei dati giornalieri esistenti (insieme all'e-mail, che può contenere "+" per esempio o il numero di porta nel dominio). Dovresti capire le implicazioni dell'uso di "alcuni" regex. Potrebbero esserci alcuni utenti (anche interi paesi) che non corrisponderanno ad alcune regex. Oppure gli utenti possono inserire numeri, che non sono numeri di telefono anche se corrispondono alla regex.

http://en.wikipedia.org/wiki/E.164

C'è stato un problema su Zend_Phone implementare E.164. Ma alla fine non sono stato implementato. La soluzione accettata (/^((\+|00)\d{1,3})?\d+$/) sarebbe partita anche la prossima stringa del telefono come valido:

+0000000000000000000000000000000000000000000000 
+0

il mondo è piccolo – tobik

+0

Molto molto :) –

0

si può provare questo, funziona per me

/^(\+[\d|\-]*)\s([0-9]+)$/ 

o versione estesa

/^(\+[011|999|998|997|996|995|994|993|992|991|990|979|978|977|976|975|974|973|972|971|970|969|968|967|966|965|964|963|962|961|960|899|898|897|896|895|894|893|892|891|890|889|888|887|886|885|884|883|882|881|880|879|878|877|876|875|874|873|872|871|870|859|858|857|856|855|854|853|852|851|850|839|838|837|836|835|834|833|832|831|830|809|808|807|806|805|804|803|802|801|800|699|698|697|696|695|694|693|692|691|690|689|688|687|686|685|684|683|682|681|680|679|678|677|676|675|674|673|672|671|670|599|598|597|596|595|594|593|592|591|590|509|508|507|506|505|504|503|502|501|500|429|428|427|426|425|424|423|422|421|420|389|388|387|386|385|384|383|382|381|380|379|378|377|376|375|374|373|372|371|370|359|358|357|356|355|354|353|352|351|350|299|298|297|296|295|294|293|292|291|290|289|288|287|286|285|284|283|282|281|280|269|268|267|266|265|264|263|262|261|260|259|258|257|256|255|254|253|252|251|250|249|248|247|246|245|244|243|242|241|240|239|238|237|236|235|234|233|232|231|230|229|228|227|226|225|224|223|222|221|220|219|218|217|216|215|214|213|212|211|210|98|95|94|93|92|91|90|86|84|82|81|66|65|64|63|62|61|60|58|57|56|55|54|53|52|51|49|48|47|46|45|44|43|41|40|39|36|34|33|32|31|30|27|20|7|1|\-]*)\s([0-9]+)/ 
Problemi correlati