0

電話番号を特定の形式に分解する関数または簡単な方法はありますか?

数値を入力できます (モバイル、さまざまな国コード)

多分

+4917112345678
+49171/12345678
0049171 12345678

または多分他の国から

004312345678
+44...

私はやっています

$mobile_new = preg_replace("/[^0-9]/","",$mobile);  

49171 の形式 (先頭に + または 00 なし) が必要なため、数字以外のすべてを削除するには0171 (49171 である必要があります。

したがって、最初の数字は常に、+/00 との間に (0) がない田舎である必要があります。

誰かがこれを解決する方法についてアドバイスをくれますか?

4

3 に答える 3

0

使用できます

(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)

ほとんどのケースに一致し、単にそれらを何も置き換えません。例えば:

$mobile = "+4917112345678";
$mobile_new = preg_replace("/(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)/","",$mobile);
echo $mobile_new;
//output: 4917112345678

regex101 デモ

説明:

ここを利用しORて、各ケースを1つずつ照合します。

  1. (?:^(?:00|\+|\+\d{2}))に一致00する++、文字列の先頭に 2 つの数字が続きます
  2. \//文字列の任意の場所に一致します
  3. \s文字列内の任意の場所にある空白に一致します (regex101 デモの改行に一致しますが、各数字を個別に一致させると思います)
  4. \(\d\)文字列内の任意の場所にある括弧で囲まれた数値に一致します

この正規表現でカバーされない唯一のケースは入力形式です01712345678。これは、国固有のプレフィックスが何であるかを推測することしかできないためです。デフォルトにしたい場合は、単一で49始まる各入力を次のように置き換えます。049

$mobile = "01712345678";
$mobile_new = preg_replace("/^0/","49",$mobile);
echo $mobile_new;
//output: 491712345678
于 2015-02-06T10:38:15.833 に答える
0

Google の LibPhoneNumber とその PHP への移植版を参照することをお勧めします。多くの形式と国をサポートしており、よく管理されています。これは自分で考えないほうがいいです。

https://github.com/giggsey/libphonenumber-for-php

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US");
于 2015-02-06T11:35:42.703 に答える