0

簡単な携帯電話番号をフォーマットする方法について頭を悩ませてきましたが、それを行う方法が思いつきません。友人から、preg_replace 関数を使用できるとのことでしたが、読んだことはあるもののよくわからないのでわかりません。基本的に私がやりたいことは、「こんにちは、私の名前はジョンです。07771234567 のおかげで私に電話することができますか」というメッセージを文字列に渡して、「こんにちは、私の名前はジョンです。電話してもらえますか」と読み替えることです。 07xx12x4xx7 ありがとう」. つまり、数字の一部を「x」に置き換えます。

また、「0777 123 4567」のように携帯電話を書く人もいることも承知しています。そのため、空白も削除する必要があります。さらに、stripos() という関数を使用して「07」の開始位置を探して番号の開始位置を見つけましたが、番号の開始位置と終了位置を探す必要があります。

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

0

http://www.braemoor.co.uk/software/telnumbers.shtml

このサイトから PHP 関数をダウンロードすると、さまざまな種類の英国の電話番号をすべて検証できます。

私が使用しているのはライブシステムのATMなので、間違いなく機能します。

幸運を

于 2012-07-25T10:03:08.040 に答える
0

これはすべての形式を考慮しているわけではありません。一部の電話番号はさまざまな形式で配置でき、011 または長さをチェックするだけでは実行できません。考えられる長さごとにチェックするには、すべての市外局番/組み合わせの完全なリストが必要です。

http://support.hostgator.com/articles/specialized-help/making-international-calls-from-the-united-states たとえば、英国 (UK) の電話番号が次のいずれかの方法で表現されている場合があります。 :

(+44) (0)20 7930 4832 +44 20 7930 4832 020 7930 4832

簡単な解決策かもしれません。また、私はこのコードに満足していません.1000回ほど単純化できると確信しています.

private function cleanNumber($uglyNumber){

    $number = preg_replace("/[^0-9]/","",$uglyNumber);
    if(($check = substr($number,0,3))!=='011'){
        //NON 011 Numbers

        switch(strlen($number)){
            //Same Area Code 
            //123-4567
            case 7:
                $prefix = substr($number,0,3);
                $SLN = substr($number,3,10);
                $cleanNumber = $prefix.'-'.$SLN;
                break;

            //Domestic US
            //No International Number
            case 10:
            $area = substr($number,0,3);
            $prefix = substr($number,3,3);
            $SLN = substr($number,6,10);
            $cleanNumber = '('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 11:
            // International Number [1]
                $country = substr($number,0,1);
                $area = substr($number,0,3);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,10);
                $cleanNumber = '['.$country .'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 12:
            // International Number [12]
                $country = substr($number,0,2);
                $area = substr($number,0,3);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,10);
                $cleanNumber = '['.$country .'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 13:
            // International Number [123]
                $country = substr($number,0,3);
                $area = substr($number,0,3);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,10);
                $cleanNumber = '['.$country .'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            default:
                //dono 
                return $number;
        }

    }else{
        switch(strlen($number)){

            case 11:
                // ExitUS 001 [1]
                //No Area Code Country
                $exitUs = substr($number,0,3);
                $country = substr($number,3,1);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,11);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ' .$prefix.'-'.$SLN;
                break;

            case 12:
                // ExitUS 001 [12]
                //No Area Code Country
                $exitUs = substr($number,0,3);
                $country = substr($number,3,2);
                $prefix = substr($number,4,3);
                $SLN = substr($number,7,12);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ' .$prefix.'-'.$SLN;
                break;

            case 13:
                // ExitUS 001 [123]
                //No Area Code Country
                $exitUs = substr($number,0,3);
                $country = substr($number,3,3);
                $prefix = substr($number,6,3);
                $SLN = substr($number,9,13);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ' .$prefix.'-'.$SLN;
                break;

            case 14:
                // ExitUS 001 [1]
                // With Country Code
                $exitUs = substr($number,0,3);
                $country = substr($number,3,1);
                $area   = substr($number,4,3);
                $prefix = substr($number,7,3);
                $SLN = substr($number,10,14);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 15:
                // ExitUS 001 [12]
                // With Country Code
                $exitUs = substr($number,0,3);
                $country = substr($number,3,2);
                $area   = substr($number,5,3);
                $prefix = substr($number,8,3);
                $SLN = substr($number,11,4);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            case 16:
                // ExitUS 001 [123]
                // With Country Code
                $exitUs = substr($number,0,3);
                $country = substr($number,3,3);
                $area   = substr($number,6,3);
                $prefix = substr($number,9,3);
                $SLN = substr($number,12,4);
                $cleanNumber = ''.$exitUs .' ['.$country.'] ('.$area.') ' .$prefix.'-'.$SLN;
                break;

            default:
                //dono 
                return $number;
        }

    }

    return $cleanNumber;
}
于 2014-11-07T00:18:15.373 に答える
0

おそらく直接的な正規表現の方法がありますが、このようなものはうまくいくはずです:

$foo = '07771234567';
$foo = preg_replace( '/\s+/', ' ', $foo ); // remove whitespaces
$foo = str_split($foo); // split into an array so we can loop over it more easily
$replace_with_x = array(2, 3, 6, 8, 9); // the positions of numbers you want to replace

// loop through your phone number, and replace with x where necessary
for($i=0; $i<len($foo); $i++) {
   if(in_array($i, $replace_with_x)) {
      $foo[$i] = 'x';
   }
}
于 2012-07-25T09:35:21.750 に答える