2010-06-22 1065 views
38

Cómo validar el número de teléfono usando php¿Cómo validar el número de teléfono usando PHP?

+1

Defina qué hace que un número de teléfono sea * válido *? – Gordon

+4

¿Es este un número de teléfono australiano, un número de Reino Unido, un número internacional, etc., etc.? La validación de números de teléfono de todo el mundo puede abrir más gusanos que la validación del correo electrónico, y no creo que haya visto eso hecho 100% infalible. – HorusKol

+0

Relacionados: http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation –

Respuesta

16

Como los números de teléfono deben ajustarse a un patrón, puede usar expresiones regulares para hacer coincidir el número de teléfono ingresado con el patrón que defina en expresiones regulares.

php tiene las funciones ereg y preg_match(). Sugeriría usar preg_match() ya que hay más documentación para este estilo de expresión regular.

Un ejemplo

$phone = '000-0000-0000'; 

if(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $phone)) { 
    // $phone is valid 
} 
+14

y personas que ponen corchetes alrededor de su código de área? (202) 555 1212 – Mawg

+11

Forzar una convención de formato particular es una locura. También necesita manejar los prefijos de marcación internacional. – Quentin

+3

Eso debería ser un {3} en el medio del preg_match, ¿verdad? No es un {4}. Al menos para números telefónicos de EE. UU. –

13

I depende en gran medida de qué formatos de número que tienen como objetivo apoyar, y lo estricto que desea aplicar agrupación número, uso de espacios en blanco y otros separadores, etc ....

Eche un vistazo al this similar question para obtener algunas ideas.

Luego está E.164 que es una recomendación estándar de numeración de ITU-T

+2

más uno para e.164 – Mawg

25

He aquí cómo encontrar números de teléfono de Estados Unidos de 10 dígitos válidos. En este punto, supongo que el usuario quiere mi contenido, por lo que los números en sí son confiables. Estoy usando una aplicación que finalmente envía un mensaje SMS, así que solo quiero los números sin procesar, pase lo que pase. El formateo siempre se puede agregar más tarde

//eliminate every char except 0-9 
$justNums = preg_replace("/[^0-9]/", '', $string); 

//eliminate leading 1 if its there 
if (strlen($justNums) == 11) $justNums = preg_replace("/^1/", '',$justNums); 

//if we have 10 digits left, it's probably valid. 
if (strlen($justNums) == 10) $isPhoneNum = true; 

Editar: Terminé teniendo que portar esto a Java, si alguien está interesado. Se ejecuta con cada pulsación de tecla, así que traté de mantenerlo bastante claro:

boolean isPhoneNum = false; 
if (str.length() >= 10 && str.length() <= 14) { 
    //14: (###) ###-#### 
    //eliminate every char except 0-9 
    str = str.replaceAll("[^0-9]", ""); 

    //remove leading 1 if it's there 
    if (str.length() == 11) str = str.replaceAll("^1", ""); 

    isPhoneNum = str.length() == 10; 
} 
Log.d("ISPHONENUM", String.valueOf(isPhoneNum)); 
+2

lo que si el número ingresado es +1981878978 – Bugfixer

+0

@Bugfixer Solo elimina la línea 1 si la longitud es 11. – Staysee

+0

Pude usar esto con algunas modificaciones. gracias por hacer tu respuesta directa. – Kray

Cuestiones relacionadas