-2

重複の可能性:
レバノンの電話番号の PHP 正規表現
preg_replace で電話番号の一部をマスクする

私の国では、電話番号のプレフィックスとして 3 つの可能性があります: +62、62、および 0。

例えば ​​:

+622112345、622112345、02112345

さて、問題は...電話番号を1つの形式、つまり0xxxxで保存したいです。つまり、すべての電話プレフィックスが 0xxxx 形式に変換されます。

入力:+622112345、出力:02112345

入力:622112345、出力:02112345

入力:02112345、出力:02112345

substr() 関数を使用すると、IF がこの状況を解決すると考えました。

$Prefix = substr($Number, 0, 2);

if ($Prefix = "+6"){
//some code to convert +62 into 0
}else if ($Prefix = "62"){
//some code to convert 62 into 0
}else{
//nothing to do, because it's already 0
}

IFを使用する以外にこれを行う方法はありますか? たとえば、正規表現で...

4

2 に答える 2

2

はい、これは単一の正規表現ではるかに簡単です:

preg_match( '/(0|\+?\d{2})(\d{7,8})/', $input, $matches);
echo $matches[1] . ' is the extension.' . "\n";
echo $matches[2] . ' is the phone number.' . "\n";

これにより、いずれかの入力から内線番号と電話番号の両方がキャプチャされます。ただし、特定のケースでは、テスト ベンチを作成しpreg_replace()、目的の出力文字列を取得するために使用できます。

$tests = array( '+622112345' => '02112345', '622112345' => '02112345', '02112345' => '02112345');

foreach( $tests as $test => $desired_output) {
    $output = preg_replace( '/(0|\+?\d{2})(\d{7,8})/', '0$2', $test);
    echo "Does $output match $desired_output? " . ((strcmp( $output, $desired_output) === 0) ? "Yes" : "No") . "\n";
}

デモを見ると$output、すべてのテスト ケースに対して正しい文字列が適切に作成されていることがわかります。

于 2012-08-08T15:08:11.583 に答える
0
if (preg_match('[^\+62|62]', $your_phone_number)) {
    # if string contains +62 or 62 do something with this number
} else {
    # do nothing because string doesn't contain +62 or 62
}

それはちょうど短いです

于 2012-08-08T15:18:54.483 に答える