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 相关文章推荐
杏林同学录(二)
Oct 09 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
php文件系统处理方法小结
May 23 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
php支付宝系列之电脑网站支付
May 30 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
Jun 22 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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世纪万年历
2006/12/06 PHP
那些年一起学习的PHP(二)
2012/03/21 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python过滤序列元素的方法
2020/07/31 Python
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
财务管理职业生涯规划书
2014/02/26 职场文书
2016春节家属慰问信
2015/03/25 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
java executor包参数处理功能 
2022/02/15 Java/Android
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS