1

「トークン」を使用して数値をフォーマットする方法を探しています。これは条件付きである必要があります (最初の数文字について)。

例:

<?php
 $styles=array('04## ### ###','0# #### ####','13# ###','1800 ### ###');
 format_number(0412345678); /*should return '0412 345 678'*/
 format_number(0812345678); /*should return '08 1234 5678'*/
 format_number(133622); /*should return '133 622'*/
 format_number(1800123456); /*should return '1800 123 456'*/
?>

ご想像のとおり、これを使用して、「タイプ」に応じてオーストラリアの電話番号をフォーマットします。

これを行うPHP関数がありますが、それは〜114行で、多くの繰り返しコードが含まれています.

誰でも助けることができますか?

4

2 に答える 2

1
foreach ($styles as $style) {
    $pattern = sprintf(
        "/^%s$/D",
        str_replace(array(' ', '#'), array('', '\d'), $style)
    );

    if (preg_match($pattern, $phoneNumber)) {
        return vsprintf(
            preg_replace('/\S/', '%s', $style),
            str_split($phoneNumber)
        );
    }
}
return $phoneNumber;

$styles は優先順位に従って並べる必要があります。おそらく、数値の初期マスクの長さが優先順位を決定する必要があります。その場合、使用できます

usort($styles, function($a, $b) {
    return strspn($b, '0123456789') - strspn($a, '0123456789');
});
于 2010-03-16T07:32:02.077 に答える
1

おもちゃの例です

$number="0412345678";
$styles=array('04## ### ###','0# #### ####','13# ###','1800 ### ###');
$whatiwant = preg_grep("/04/i",$styles);  #04 is hardcoded. 
$s = explode(" ",$whatiwant[0]);
$count= array_map(strlen,$s);
$i=0;
foreach($count as $k){
  print substr($number,$i,$k)." ";
  $i=$k;
}

出力

$ php test.php
0412 345 234 
于 2010-03-16T04:24:11.583 に答える