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
php下检测字符串是否是utf8编码的代码
Jun 28 PHP
php动态生成JavaScript代码
Mar 09 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
Mar 21 PHP
php cookie的操作实现代码(登录)
Dec 29 PHP
array_multisort实现PHP多维数组排序示例讲解
Jan 04 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
PHP中替换键名的简易方法示例详解
Jan 07 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
PHP生成压缩文件实例
Feb 07 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
thinkphp 框架数据库切换实现方法分析
May 18 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
prettify 代码高亮着色器google出品
2010/12/28 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
python3让print输出不换行的方法
2020/08/24 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
Linux文件系统类型
2012/02/15 面试题
科长竞聘演讲稿
2014/05/16 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
旷工检讨书大全
2015/08/15 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
如何用python清洗文件中的数据
2021/06/18 Python
vue打包时去掉所有的console.log
2022/04/10 Vue.js