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
第十一节--重载
Nov 16 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
php实现无限级分类
Dec 24 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
php parse_str() 函数的定义和用法
May 23 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
浅谈php://filter的妙用
Mar 05 PHP
浅谈PHP无限极分类原理
Mar 14 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
paypal即时到账php实现代码
2010/11/28 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
Python实现多行注释的另类方法
2014/08/22 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
见习期自我鉴定范文
2014/03/19 职场文书
五一活动标语
2014/06/30 职场文书
地方白酒代理协议书
2014/10/25 职场文书
员工辞职信范文
2015/03/02 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫