4085551234など、10文字の長い文字列の形式のデータベースレコードがあります。
これらをこのフォーマットにフォーマットしたいと思います:(408)555-1234。
これは正規表現に関連していると思います。私はプログラミングに不慣れで、ここで完全に独学しているので、テキスト処理の実行に関連するあらゆる種類のリソースも同様に高く評価されます。ありがとう!
正規表現は間違いなくこれには過剰です。 「電話番号」を取得してそれを10桁に正規化したい場合は、正規表現に適しています。あなたが求めていることを行うには、次のようなことをしてください:
echo '('.substr($data, 0, 3).') '.substr($data, 3, 3).'-'.substr($data,6);
データを分割する方法はすでに知っているので、必要な部分を取得するためにsubstrなどを使用できます。 RegExは、必ずしも厳密な形式であるとは限らない文字列の照合に役立ちます。 (可変数のスペース、その前後の可変要素、余分なダッシュなど)。しかし、あなたの場合、入力は常に厳密に10桁にフォーマットされているため、それをフォーマットするためにRegExの追加のオーバーヘッドは必要ありません。
ここを見てください: 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;
}
私はおそらく一緒に行きます
$num = "4085551234"; // given
$formatted = "(".substr($num,0,3).") ".substr($num,3,3)."-".substr($num,6);
ここではRegexは適切ではありません。
簡単に言うと、次のようなことができます。
\(\d\{3\}\)\(\d\{3\}\)\(\d\{4\}\)
10桁を3つのサブグループ式に一致させ、各サブグループを使用して出力するには、次のようにします。
"(\1) \2-\3
しかし、実際には、自由形式のデータは通常少しトリッキーです
私は私の高度な配置コンピューターサイエンスクラスのためにこの質問をしなければなりませんでした。 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);
}
}