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 strtr() 函数使用说明
Nov 21 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php使用session二维数组实例
Nov 06 PHP
PHP调用其他文件中的类
Apr 02 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 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
php4的session功能评述(三)
2006/10/09 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
php实现微信支付之退款功能
2018/05/30 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
JSONP基础知识详解
2017/03/19 Javascript
React组件生命周期详解
2017/07/03 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
python实现机器人行走效果
2018/01/29 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
详解Python if-elif-else知识点
2018/06/11 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
python要安装在哪个盘
2020/06/15 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
信息管理应届生求职信
2014/03/07 职场文书
委托书模板
2014/04/04 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
写给领导的感谢信
2015/01/22 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书