21

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

これらを次の形式にフォーマットしたい: (408) 555-1234.

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

4

5 に答える 5

98

正規表現は、これには間違いなくやり過ぎです。「電話番号」を取得して 10 桁に正規化したい場合は、正規表現を使用するとよいでしょう。求めていることを行うには、次のようにします。

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

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

于 2010-01-18T23:21:34.150 に答える
21

こちらをご覧ください:電話番号のフォーマット

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;
}
于 2010-01-18T23:20:08.193 に答える
6

私はおそらく一緒に行くだろう

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

ここでは、正規表現はあまり適切ではありません。

于 2010-01-18T23:23:20.260 に答える
3

自明なことに、次のようなことができます:

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

10 桁を 3 つのサブグループ式に一致させ、各サブグループを使用してそれらを出力するには:

"(\1) \2-\3

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

于 2010-01-18T23:21:35.477 に答える
2

高度な配置のコンピューター サイエンスのクラスで、この質問をしなければなりませんでした。ジャワ:

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);
  }
}
于 2015-10-27T22:24:17.753 に答える