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开发GUI
Oct 09 PHP
同一空间绑定多个域名而实现访问不同页面的PHP代码
Dec 06 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
php面向对象全攻略 (七) 继承性
Sep 30 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 PHP
laravel5.6中的外键约束示例
Oct 23 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随机数生成代码与使用实例分析
2011/04/08 PHP
ThinkPHP路由详解
2015/07/27 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
package.json文件配置详解
2017/06/15 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
详解python变量与数据类型
2020/08/25 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
仓管员岗位职责范文
2013/11/08 职场文书
化工工艺设计求职信
2014/06/25 职场文书
宣传标语大全
2014/07/01 职场文书
文员岗位职责
2015/02/04 职场文书
体育个人工作总结
2015/02/09 职场文书
护理专业自荐信范文
2015/03/06 职场文书
通知函的格式
2015/04/27 职场文书
贷款担保书范本
2015/09/22 职场文书
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python