LoginSignup
0
0

More than 1 year has passed since last update.

【電話番号抽出】英数全角記号特殊文字が入り混じった文字列から数字だけを抽出する。ついでに全角数字は半角数字に変換する。

Last updated at Posted at 2021-10-13

あらすじ

先日、Amazonから出品者情報を取得する必要があったので、データを見て見たところ、電話番後がこのような形になっていた。

※個人情報保護の為電話番号は0でマスキングしてあります。

000−0000−000
+8190-0000-z0000
03 0000 0000 です。
0000−00−0000
電話番号はこちら → 000  0000 0000
00−0000−0000
〇〇宛 000−0000−000

どうやらAmazonでは出品者の情報(本人によるCSV入力だと思われる)はちゃんとしたバリデートが行われていないっぽい。

要件

・とりあえず数字だけを取得する。
・全角数字は半角数字に変換して、電話番号の一部と数える。

実際のコード

Paizaに実際に動かしたコードがあるので、コード見るのだるい人は確認してみてください。
https://paiza.io/projects/TwekAfnexAUCixptI7Sn3g


//文字変換を行うメソッド
function mbTrim($pString)
{
   $pString = preg_replace('/[\D*$]/u', '', $pString); //数字だけ(半角全角問わず)抽出
   $pString = mb_convert_kana($pString, "n"); //全角の値を半角に変換
   $pString = preg_replace('/^81/u', 0, $pString); //国際電話番号表記(+81)は先頭を「0」に修正

   return $pString;
}

//テストデータ格納してるだけのメソッド
function getData(){
    $data = 
"000−0000−000
+8190-0000-z0000
03 0000 0000 です。
0000−00−0000
電話番号はこちら → 000  0000 0000
00−0000−0000
〇〇宛 000−0000−000";

    $data_array = explode("\n", $data);

    return $data_array;
}

$telNums = getData();
foreach($telNums as $telNum){
    $telNum = mbTrim($telNum);
    $convertedTelNums[] = $telNum;
}

var_dump($convertedTelNums);
/* 結果
array(7) {
  [0]=>
  string(10) "0000000000"
  [1]=>
  string(11) "09000000000"
  [2]=>
  string(10) "0300000000"
  [3]=>
  string(10) "0000000000"
  [4]=>
  string(11) "00000000000"
  [5]=>
  string(10) "0000000000"
  [6]=>
  string(10) "0000000000"
}
*/
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0