php实现中文转数字


Posted in PHP onFebruary 18, 2016

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

注意事项

不支持小数

不支持大于PHP_INT_MAX的数

PHP 相关文章推荐
PHP无刷新上传文件实现代码
Sep 19 PHP
深入PHP与浏览器缓存的分析
Jun 03 PHP
php使用异或实现的加密解密实例
Sep 04 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
php实现微信公众号无限群发
Oct 11 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
浅谈PHP封装CURL
Mar 06 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 PHP
PHP和MySql中32位和64位的整形范围是多少
Feb 18 #PHP
php脚本运行时的超时机制详解
Feb 17 #PHP
PHP邮件群发机实现代码
Feb 16 #PHP
46 个非常有用的 PHP 代码片段
Feb 16 #PHP
HTML中嵌入PHP的简单方法
Feb 16 #PHP
thinkphp3.2点击刷新生成验证码
Feb 16 #PHP
PHP模拟post提交数据方法汇总
Feb 16 #PHP
You might like
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
php中如何执行linux命令详解
2018/11/06 PHP
jQuery 技巧小结
2010/04/02 Javascript
jQuery的学习步骤
2011/02/23 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
python tkinter窗口最大化的实现
2019/07/15 Python
Python socket模块方法实现详解
2019/11/05 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
校庆团日活动总结
2014/08/28 职场文书
授权收款委托书
2014/09/23 职场文书
安全保证书
2015/01/16 职场文书
店长岗位职责
2015/02/11 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
配置nginx 重定向到系统维护页面
2021/06/08 Servers
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript