漢数字をアラビア数字に置換
一二三を123のように漢字表記から通常数字表記に置換
漢数字表記をアラビア数字表記に置換
PHP
// 〇一二三四五六七八九から0123456789へ置換
$search = array('〇', '一', '二', '三', '四', '五', '六', '七', '八', '九');
$replace = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
echo str_replace($search, $replace, $str);
漢数字をアラビア数字に置換
億まで対応。
PHP
// 一億二千三百四十五万六千七百八十九から123,456,789へ置換
$search = array('一', '二', '三', '四', '五', '六', '七', '八', '九');
$replace = array('1', '2', '3', '4', '5', '6', '7', '8', '9');
$str = str_replace($search, $replace, $str);
// 単位毎に分割
preg_match('/(?:(.*千)?(.*百)?(.*十)?(.*)?億)?(?:(.*千)?(.*百)?(.*十)?(.*)?万)?(.*千)?(.*百)?(.*十)?(.*)?/', $str, $matches);
$unit = array('億', '万', '千', '百', '十');
foreach($matches as $matchesKey => $matchesVal) {
// $matches[0] パターン全体にマッチしたテキストを除外
if ($matchesKey == 0) {
continue;
}
if (array_search($matchesVal, $unit) !== FALSE){
// 単位のみの場合は1に置換
$num[$matchesKey] = '1';
} elseif ($matchesVal == '') {
// 空の場合は0に置換
$num[$matchesKey] = '0';
} else {
// 数字+単位の場合は単位を削除
$num[$matchesKey] = str_replace($unit, '', $matchesVal);
}
}
// 分割し置換した数字を連結
echo number_format(implode('', $num));
一千二百三十四億五千六百七十八万九千
Array
(
[0] => 1千2百3十4億5千6百7十8万9千
[1] => 1千
[2] => 2百
[3] => 3十
[4] => 4
[5] => 5千
[6] => 6百
[7] => 7十
[8] => 8
[9] => 9千
[10] =>
[11] =>
[12] =>
)
一億二千三百四十五万六千七百八十九
Array
(
[0] => 1億2千3百4十5万6千7百8十9
[1] =>
[2] =>
[3] =>
[4] => 1
[5] => 2千
[6] => 3百
[7] => 4十
[8] => 5
[9] => 6千
[10] => 7百
[11] => 8十
[12] => 9
)
0はパターン全体にマッチしたテキスト。