[PHP-users 26759] Re: ' 百二十三 ' -> 123

abe_i abe_i @ yamagishi.or.jp
2005年 9月 4日 (日) 16:35:07 JST


阿部といいます。

思いつきですので、バグもあるかもしれません、その辺はご勘弁を。
アイデアとしてみてください。

またevalを使っていますので、セキュリティ面は別途、考慮してください。

以下が関数です。

function waToArabic($str) {
  $wa = array('兆', '億', '万', '千', '百', '十', '九', '八', 
              '七', '六', '五', '四', '三', '二', '一');
  $arabic = array(',1000000000000,', ',100000000,', ',10000,', 
                  '*1000', '*100', '*10', '+9', '+8', '+7', '+6', 
                  '+5', '+4', '+3', '+2', '+1');

  $val = explode(',', str_replace($wa, $arabic, $str));

  $ret = 0;
  $sub = 0;
  foreach($val as $unit) {
    if ($unit == '') continue;
    if (ereg('[^0-1]', $unit)) {
      $unit = (substr($unit, 0 ,1) == "*" ?  $unit = 1 . $unit : $unit);
      $unit = str_replace('0*', '0+1*', $unit);
      eval('$sub +=' . $unit . ';');
   }else{
      $sub = $sub == 0 ? $unit : $sub * $unit;
      $ret += $sub;
      $sub = 0;
    }
  }
  return $ret + $sub;
}

> 高本といいます。
> 
> 例えば、'百二十三'を 123 というように
> 漢数字を数値に変換したいのですが、
> 一番ステキな方法は何でしょうか?
-- 
<abe_i @ yamagishi.or.jp>



PHP-users メーリングリストの案内