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网站来路获取代码(针对搜索引擎)
Jun 08 PHP
php 注释规范
Mar 29 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
分享一个php 的异常处理程序
Jun 22 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
PHP is_array() 检测变量是否是数组的实现方法
Jun 13 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
php中pcntl_fork详解
Apr 01 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类的使用 实例代码讲解
2009/12/28 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
浅谈php冒泡排序
2014/12/30 PHP
php递归实现无限分类的方法
2015/07/28 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
Django如何配置mysql数据库
2018/05/04 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
Python Pandas 箱线图的实现
2019/07/23 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
python scatter函数用法实例详解
2020/02/11 Python
Python PIL库图片灰化处理
2020/04/07 Python
Python urllib3软件包的使用说明
2020/11/18 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
最新奶茶店创业计划书范文
2014/02/08 职场文书
学校标语大全
2014/06/19 职场文书
工作作风建设心得体会
2014/10/22 职场文书
数学教师求职信范文
2015/03/20 职场文书
工作年限证明模板
2015/06/15 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers