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自动反斜杠的函数代码
Jan 05 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
php中autoload的用法总结
Nov 08 PHP
小谈php正则提取图片地址
Mar 27 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
php基于jquery的ajax技术传递json数据简单实例
Apr 15 PHP
PHP序列化/对象注入漏洞分析
Apr 18 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 PHP
tp5.1框架数据库子查询操作实例分析
May 26 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循环输出数据库内容的代码
2008/05/24 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python实现从百度API获取天气的方法
2015/03/11 Python
Python类属性的延迟计算
2016/10/22 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
详解python中list的使用
2019/03/15 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
专科毕业生求职简历的自我评价
2013/10/12 职场文书
班长自荐书范文
2014/02/11 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
校长师德表现自我评价
2015/03/05 职场文书
污染环境建议书
2015/09/14 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
html实现弹窗的实例
2021/06/09 HTML / CSS