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源代码
Oct 09 PHP
第十节--抽象方法和抽象类
Nov 16 PHP
实现php加速的eAccelerator dll支持文件打包下载
Sep 30 PHP
简单示例AJAX结合PHP代码实现登录效果代码
Jul 25 PHP
php print EOF实现方法
May 21 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
php+laravel依赖注入知识点总结
Nov 04 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从尾到头打印链表实例讲解
2018/09/27 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
javascript页面加载完执行事件代码
2014/02/11 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
python实现静态服务器
2019/09/05 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
制定岗位职责的原则
2013/11/08 职场文书
中学校庆方案
2014/03/17 职场文书
民事二审代理词
2015/05/25 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL