php实现中文转数字
分享一个辅助函数,使用php尽可能识别出字符串中的数字,
先上代码
functioncheckNatInt($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($plusas$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); } //来自uctphp微信开发框架,其中的checkString函数如下 functioncheckString($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; }
实现效果如下。
echocheckNatInt('九百六十万');//普通中文数字,9600000 echocheckNatInt('壹亿柒仟万零捌佰肆拾');//大写中文数字,170000840 echocheckNatInt('学好PHP拿百万年薪');//句子中的数字,1000000 echocheckNatInt('今年春运发送人次达26亿');//数字和汉字混合出现,2600000000 echocheckNatInt('两只小蜜蜂');//口语化数字,2 echocheckNatInt('万万没想到');//复古的表达方式,100000000
注意事项
不支持小数
不支持大于PHP_INT_MAX的数