2012-09-23 23 views
5

Tengo un formulario zend donde tengo un campo de número de teléfono y tengo que verificar el validador.¿Cuál es la expresión regular para la validación del número de teléfono internacional en php o zend?

He decidido usar expresiones regulares para eso. Busqué en google pero los resultados que tengo no funcionan.

¿Alguien puede por favor darme la expresión regular. aquí es mi código:

$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')) 

Gracias de antemano

+0

@Gabber, me buscado bastante, pero esos no están funcionando. Es por eso que publiqué la pregunta. El error que estaba cometiendo es que no estaba usando el '/' al principio y al final de la expresión. Lo cual he aprendido de la respuesta dada por el usuario1559230. Gracias por su comentario Gabber. Definitivamente lo recordaré para la próxima vez. – ehp

+0

Gracias por la educada respuesta :) – Gabber

Respuesta

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

Pruebe la expresión anterior. espero que esto ayude.

+0

Resuelve mi problema. Gracias @ user1559230. – ehp

+0

¿Cuál es el punto de '\ d {1,3}'? Sé que coincide con 1-3 dígitos, pero para cualquier número con al menos 3 dígitos (siguiendo el '00' opcional), coincidirá con los 3 de ellos. Por ejemplo, dado '' 18005551212', el '\ d {1,3}' coincide con '180', lo cual no tiene sentido. Y tu expresión regular rechaza números con espacios incrustados y guiones; es ese tu intento? –

2

Tenga en cuenta que el número de teléfono es una de las validaciones de datos más duras que existen (junto con el correo electrónico, que puede contener "+" por ejemplo o número de puerto en el dominio). Debes entender las implicaciones de usar "algunos" expresiones regulares. Puede haber algunos usuarios (incluso países enteros) que no coincidan con algunos regex. O los usuarios pueden ingresar números que no son números de teléfono aunque coincidan con la expresión regular.

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

Ha habido un problema sobre Zend_Phone para implementar E.164. Pero no fui implementado al final. La solución aceptada (/^((\+|00)\d{1,3})?\d+$/) coincidiría incluso siguiente cadena de teléfono como válido:

+0000000000000000000000000000000000000000000000 
+0

el mundo es pequeño – tobik

+0

Muchísimo :) –

0

puede probar esta, que funciona para mí

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

o extendida versión

/^(\+[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]+)/ 
Cuestiones relacionadas