php实现中文转数目字,实现方式很智能很php

WBOY
Freigeben: 2016-06-13 12:28:33
Original
1040 Leute haben es durchsucht

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;
}
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage