zoukankan      html  css  js  c++  java
  • php实现中文转数字,实现方式很智能很php

    分享一个辅助函数,使用php尽可能识别出字符串中的数字,实现效果如下。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    echo checkNatInt('九百六十万'); //普通中文数字,9600000
    echo checkNatInt('壹亿柒仟万零捌佰肆拾'); //大写中文数字,170000840
     
     
    echo checkNatInt('学好PHP拿百万年薪'); //句子中的数字, 1000000
    echo checkNatInt('今年春运发送人次达26亿'); //数字和汉字混合出现,2600000000
     
    echo checkNatInt('两只小蜜蜂'); //口语化数字,2
    echo checkNatInt('万万没想到'); //复古的表达方式,100000000

    注意事项

    1. 不支持小数

    2. 不支持大于PHP_INT_MAX的数

    部分实现代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    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;
    }
  • 相关阅读:
    [HDU 2089]不要62
    [WC 2011]Xor
    [BJOI 2011]元素
    [NOIp 2014]解方程
    [UVa 1326]Jurassic Remains
    [BZOJ 2152]聪聪可可
    [IOI 2011]Race
    [测试题]打地鼠
    [POJ 2828]Buy Tickets
    [测试题]gene
  • 原文地址:https://www.cnblogs.com/yyluming/p/5197443.html
Copyright © 2011-2022 走看看