web-dev-qa-db-ja.com

10桁の文字列を電話番号にどのようにフォーマットしますか?

4085551234など、10文字の長い文字列の形式のデータベースレコードがあります。

これらをこのフォーマットにフォーマットしたいと思います:(408)555-1234。

これは正規表現に関連していると思います。私はプログラミングに不慣れで、ここで完全に独学しているので、テキスト処理の実行に関連するあらゆる種類のリソースも同様に高く評価されます。ありがとう!

18
dmanexe

正規表現は間違いなくこれには過剰です。 「電話番号」を取得してそれを10桁に正規化したい場合は、正規表現に適しています。あなたが求めていることを行うには、次のようなことをしてください:

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

データを分割する方法はすでに知っているので、必要な部分を取得するためにsubstrなどを使用できます。 RegExは、必ずしも厳密な形式であるとは限らない文字列の照合に役立ちます。 (可変数のスペース、その前後の可変要素、余分なダッシュなど)。しかし、あなたの場合、入力は常に厳密に10桁にフォーマットされているため、それをフォーマットするためにRegExの追加のオーバーヘッドは必要ありません。

91
SoapBox

ここを見てください: 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;
}
19
Rubens Farias

私はおそらく一緒に行きます

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

ここではRegexは適切ではありません。

6
Grumdrig

簡単に言うと、次のようなことができます。

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

10桁を3つのサブグループ式に一致させ、各サブグループを使用して出力するには、次のようにします。

"(\1) \2-\3

しかし、実際には、自由形式のデータは通常少しトリッキーです

3
John Weldon

私は私の高度な配置コンピューターサイエンスクラスのためにこの質問をしなければなりませんでした。 Java:

10桁の#を受け入れ、それを電話番号としてフォーマットするプログラムを作成します。

例:705726552
出力:(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