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 相关文章推荐
BBS(php & mysql)完整版(八)
Oct 09 PHP
PHP学习 变量使用总结
Mar 24 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
Symfony2学习笔记之模板用法详解
Mar 17 PHP
学习PHP的数组总结【经验】
May 05 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 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来计算某个目录大小的方法
2014/04/01 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
python判断windows隐藏文件的方法
2014/03/21 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
python离线安装外部依赖包的实现
2020/02/13 Python
python 画图 图例自由定义方式
2020/04/17 Python
利用python 下载bilibili视频
2020/11/13 Python
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
企业为何需要商业计划书
2013/12/26 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
大专生自我评价
2014/01/28 职场文书
领导欢迎词致辞
2015/01/23 职场文书
中学生学习保证书
2015/02/26 职场文书
入党积极分子群众意见
2015/06/01 职场文书
利用Python判断你的密码难度等级
2021/06/02 Python