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
php中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 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
改变Apache端口等配置修改方法
2008/06/05 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
Python urlopen()函数 示例分享
2014/06/12 Python
MySQL最常见的操作语句小结
2015/05/07 Python
wxPython中listbox用法实例详解
2015/06/01 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
大专自我鉴定范文
2013/10/01 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
上班迟到检讨书
2015/05/06 职场文书
爱的教育读书笔记
2015/06/26 职场文书
2019通用版导游词范本!
2019/08/07 职场文书