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程序员编程注意事项
Apr 10 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
php实现统计邮件大小的方法
Aug 06 PHP
PHP代码优化之成员变量获取速度对比
Feb 28 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
php加密解密字符串示例
Oct 13 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 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
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
js密码强度检测
2016/01/07 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
详解如何使用Python编写vim插件
2017/11/28 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
2014新课程改革心得体会
2014/03/10 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
安全协议书
2014/04/23 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
商场租赁意向书
2014/07/30 职场文书
开除员工通知
2015/04/22 职场文书
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS