热搜:NVER node 开发 php

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

2024-07-24 19:20:01
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 ;

}