2010-01-18 26 views
18

Tengo registros de base de datos en forma de cadenas largas de 10 caracteres, como 4085551234.¿Cómo formatear una cadena de 10 dígitos en un número de teléfono?

Deseo formatearlas en este formato: (408) 555-1234.

Creo que esto está relacionado con la expresión regular. Soy nuevo en la programación y soy completamente autodidacta aquí, por lo que también apreciaría cualquier tipo de recurso relacionado con la ejecución del procesamiento de texto. ¡Gracias!

+0

lo que es la tecnología db (MySQL)? – grenade

+2

Simplemente un lado-- los formatos de los números de teléfono varían AMPLIAMENTE en todo el mundo, así que a menos que esté seguro de que solo muestra números de estilo estadounidenses o similares, es posible que no desee codificar un formato específico. – Joe

+0

Similar: http://stackoverflow.com/a/5872200/386579 –

Respuesta

88

una expresión regular es sin duda una exageración para éste. Si desea tomar un "número de teléfono" y normalizarlo a 10 dígitos, sería un buen uso para una expresión regular. Para hacer lo que estás pidiendo, simplemente hacer algo como:

echo '('.substr($data, 0, 3).') '.substr($data, 3, 3).'-'.substr($data,6); 

Como usted ya sabe cómo dividir sus datos, sólo puede utilizar substr o algo similar para agarrar las partes que desea. RegEx es útil para hacer coincidir cadenas que no siempre tienen un formato estricto. (Como números variables de espacios, cosas variables antes o después de él, guiones adicionales, etc.). Pero en su caso, la entrada siempre está estrictamente formateada en 10 dígitos, nada más, por lo que no necesita la sobrecarga adicional de un RegEx para formatearla.

+2

Me gusta la metodología detrás de este. ¡Muchas gracias! Puedo ver cómo hiciste lo que hiciste, y aprendí un poco sobre substr(). ¡Gracias! – dmanexe

+1

Las comillas simples funcionarán bien aquí ya que no es necesario procesarlas. – Cymbals

18

Echa un vistazo aquí: Format phone number

function format_phone($phone) 
{ 
    $phone = preg_replace("/^\d/", "", $phone); 

    if(strlen($phone) == 7) 
     return preg_replace("/(\d{3})(\d{4})/", "$1-$2", $phone); 
    elseif(strlen($phone) == 10) 
     return preg_replace("/(\d{3})(\d{3})(\d{4})/", "($1) $2-$3", $phone); 
    else 
     return $phone; 
} 
3

Trivialmente que podría hacer algo como:

\(\d\{3\}\)\(\d\{3\}\)\(\d\{4\}\) 

para que coincida con los 10 dígitos en 3 expresiones de los subgrupos, y luego imprimir a cabo utilizando cada subgrupo:

"(\1) \2-\3 

Pero en la práctica forma de datos sin suele ser un poco más difícil

6

probablemente me vaya con

$num = "4085551234"; // given             
$formatted = "(".substr($num,0,3).") ".substr($num,3,3)."-".substr($num,6); 

Regex no es realmente apropiado aquí.

+0

¡Gracias! Similar a la solución mencionada anteriormente, fui con. – dmanexe

2

Tenía que hacer esta pregunta para mi clase de informática avanzada. Java:

Escriba un programa que acepte un número de 10 dígitos y lo formatee como un número de teléfono.

Ex: 705726552
Salida: (705)726-2552

import java.util.Scanner; 
    public class TelNumCorrection{ 

    public static void main(String[]args){ 

    Scanner scan = new Scanner(System.in); 
    System.out.println("Please enter a 10 digit number"); 
    String num=scan.nextLine(); 

    String a=num.substring(0,3); 
    String b=num.substring(3,6); 
    String c=num.substring(6); 
    System.out.println("("+a+ ")"+b+"-"+c); 
    } 
} 
+1

responde la pregunta, proporciona un programa para escanear y luego formatear/imprimir números como se solicitó en la pregunta – amdixon

+2

Esta pregunta está etiquetada con php, por lo tanto, esta respuesta no parece relevante. – timss

Cuestiones relacionadas