web-dev-qa-db-fra.com

Comment formez-vous une chaîne à 10 chiffres dans un numéro de téléphone?

J'ai des enregistrements de base de données sous la forme de 10 chaînes longues de caractère, telles que 4085551234.

Je souhaite les formater dans ce format: (408) 555-1234.

Je pense que ceci est lié à la regex. Je suis nouveau à la programmation et à la programmation totalement autodidacte ici, de sorte que tout type de ressource relatif à l'exécution du traitement de texte serait également apprécié. Merci!

18
dmanexe

Une regex est définitivement surchargée pour celui-ci. Si vous vouliez prendre un "numéro de téléphone" et la normaliser à 10 chiffres, ce serait une bonne utilisation pour une regex. Pour faire ce que vous demandez, faites simplement quelque chose comme:

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

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

91
SoapBox

Jetez un oeil ici: Numéro de téléphone format

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;
}
19
Rubens Farias

J'irais probablement avec

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

Regex n'est pas vraiment approprié ici.

6
Grumdrig

Trivialement, vous pourriez faire quelque chose comme:

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

Pour correspondre aux 10 chiffres en 3 expressions de sous-groupe, puis imprimez-les à l'aide de chaque sous-groupe:

"(\1) \2-\3

Mais dans la pratique, les données de formulaire libre sont généralement un peu plus difficiles

3
John Weldon

Je devais faire cette question pour ma classe d'informatique de placement avancé. Java:

Écrivez un programme qui accepte un numéro à 10 chiffres et le formate comme numéro de téléphone.

Ex: 705726552
Sortir: (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);
  }
}
2
Giselle