2010-01-18 3 views
18

J'ai des enregistrements de base de données sous la forme de longues chaînes de 10 caractères, tels que 4085551234.Comment formater une chaîne de 10 chiffres dans un numéro de téléphone?

Je souhaite mettre en forme ces dans ce format: (408) 555-1234.

Je pense que c'est lié à regex. Je suis novice en programmation et complètement autodidacte ici, donc toute sorte de ressources concernant le traitement de texte serait appréciée aussi. Merci!

+0

Quelle est la technologie db (mysql)? – grenade

+2

Juste un côté-- les formats de numéros de téléphone varient énormément à travers le monde, donc à moins que vous ne soyez sûr que vous n'affichez que des numéros de style américains ou similaires, vous ne voudrez peut-être pas coder un format spécifique. – Joe

+0

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

Répondre

88

Un regex est sans aucun doute surpuissant pour celui-ci. Si vous vouliez prendre un "numéro de téléphone" et le normaliser à 10 chiffres, ce serait une bonne utilisation pour une regex. Pour faire ce que vous demandez, il suffit de faire quelque chose comme:

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

Puisque vous savez déjà comment diviser vos données, vous pouvez simplement utiliser substr ou quelque chose de similaire pour saisir les pièces que vous voulez. RegEx est utile pour faire correspondre des chaînes qui n'ont pas toujours un format strict. (Comme des nombres variables d'espaces, des éléments variables avant ou après, des tirets supplémentaires, etc.). Mais dans votre cas, l'entrée est toujours strictement formatée à 10 chiffres, rien d'autre, donc vous n'avez pas besoin de la surcharge supplémentaire d'un RegEx pour le formater.

+2

J'aime la méthodologie derrière celui-ci le plus. Merci beaucoup! Je peux voir comment vous avez fait ce que vous avez fait, et j'ai appris un peu à propos de substr(). Merci! – dmanexe

+1

Les guillemets simples fonctionneront correctement car ils n'ont pas besoin d'être traités. – Cymbals

18

Jetez un oeil ici: 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

trivialement que vous pourriez faire quelque chose comme:

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

Pour faire correspondre les 10 chiffres dans 3 expressions du sous-groupe, puis les imprimer à l'aide de chaque sous-groupe:

"(\1) \2-\3 

Mais dans la pratique des données de forme libre est généralement un peu plus délicat

6

Je serais probablement aller avec

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

Regex n'est pas vraiment approprié ici.

+0

Merci! Similaire à la solution mentionnée ci-dessus, je suis allé avec. – dmanexe

2

J'ai dû faire cette question pour mon cours avancé en informatique. Java:

Ecrivez un programme qui accepte un nombre à 10 chiffres et le formate en tant que numéro de téléphone.

Ex: 705726552
Sortie: (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

il fait répondre à la question, il offre un programme de numérisation et le format/numéros d'impression à la demande en question – amdixon

+2

Cette question est étiquetée avec php, en tant que telle cette réponse ne semble pas pertinent. – timss

Questions connexes