1

私はPHPの初心者で、簡単な解決策があることを知っていますが、見つけられないようです。リターン時にユーザーが入力した記号のフィールドをパージし、フォーマットを適用しようとしています。

static function getFormatedNum($num){
    if(empty($num)){}else{
    $first=  "(".substr($num, 0, 3).")";
    $second= substr($num,3,3)."-";
    $third=substr($num,6,4);
    $num=$first.$second.$third;}
    return $num;
4

3 に答える 3

1

入力の形式が次のようになっていると仮定します:5555555555

function getFormattedNum($num)
{
    if($num){
        return "(" . substr($num,0,3) . ")"
            . substr($num,3,3) . "-"
            . substr($num,6);
    }
}
于 2012-08-09T22:02:35.667 に答える
1

これはすべての形式を考慮しているわけではありません。一部の電話番号はさまざまな形式で配置でき、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-07T01:07:44.003 に答える
0

更新:同じ機能ですべての作業を行う

function getFormatedNum($num){
    //first strip all the non-digit characters from the input
    $num = preg_replace("/[^0-9]+/", "", $num);
    //and only then re-format the phone-number   
    if(!empty($num)){
      $first=  "(".substr($num, 0, 3).")";
      $second= substr($num,3,3)."-";
      $third=substr($num,6,4);
      $num=$first.$second.$third;
    }
    return $num;
}
//test
echo getFormatedNum("408.807.9565");

出力:

(408)807-9565
于 2012-08-09T22:04:25.243 に答える