php实现中文转数字
author:一佰互联 2019-04-27   click:172

分享一个辅助函数,使用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的数