分享一个辅助函数,使用php尽可能识别出字符串中的数字,
先上代码
function checkNatInt($str) { $map = array( "一" => "1","二" => "2","三" => "3","四" => "4","五" => "5","六" => "6","七" => "7","八" => "8","九" => "9", "壹" => "1","贰" => "2","叁" => "3","肆" => "4","伍" => "5","陆" => "6","柒" => "7","捌" => "8","玖" => "9", "零" => "0","两" => "2", "仟" => "千","佰" => "百","拾" => "十", "万万" => "亿", ); $str = str_replace(array_keys($map), array_values($map), $str); $str = checkString($str, "/([d亿万千百十]+)/u"); $func_c2i = function ($str, $plus = false) use(&$func_c2i) { if(false === $plus) { $plus = array("亿" => 100000000,"万" => 10000,"千" => 1000,"百" => 100,"十" => 10,); } $i = 0; if($plus) foreach($plus as $k => $v) { $i++; if(strpos($str, $k) !== false) { $ex = explode($k, $str, 2); $new_plus = array_slice($plus, $i, null, true); $l = $func_c2i($ex[0], $new_plus); $r = $func_c2i($ex[1], $new_plus); if($l == 0) $l = 1; return $l * $v + $r; } } return (int)$str; } return $func_c2i($str); } //来自uct php微信开发框架,其中的checkString函数如下 function checkString($var, $check = "", $default = "") { if (!is_string($var)) { if(is_numeric($var)) { $var = (string)$var; } else { return $default; } } if ($check) { return (preg_match($check, $var, $ret) ? $ret[1] : $default); } return $var;}
实现效果如下。
echo checkNatInt("九百六十万"); //普通中文数字,9600000echo checkNatInt("壹亿柒仟万零捌佰肆拾"); //大写中文数字,170000840 echo checkNatInt("学好PHP拿百万年薪"); //句子中的数字, 1000000echo checkNatInt("今年春运发送人次达26亿"); //数字和汉字混合出现,2600000000 echo checkNatInt("两只小蜜蜂"); //口语化数字,2echo checkNatInt("万万没想到"); //复古的表达方式,100000000
注意事项
不支持小数
不支持大于PHP_INT_MAX的数