分享一个辅助函数,使用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("壹亿柒仟万零捌佰肆拾"); //大写中文数字,170000840echo checkNatInt("学好PHP拿百万年薪"); //句子中的数字, 1000000echo checkNatInt("今年春运发送人次达26亿"); //数字和汉字混合出现,2600000000 echo checkNatInt("两只小蜜蜂"); //口语化数字,2echo checkNatInt("万万没想到"); //复古的表达方式,100000000
注意事项
不支持小数
不支持大于PHP_INT_MAX的数