【问题标题】:preg_replace displaying with limit?preg_replace 显示限制?
【发布时间】:2013-06-22 05:26:01
【问题描述】:

我有php代码

preg_replace( "/([0-9]{2})([0-9]{4})([0-9]{4})([0-9]{4})/", 
               "$1 $2 $3 $4", 
               121234123412341234)

这个结果是1.21234123412E+17。我需要12 1234 1234....

也许我需要使用其他功能?

【问题讨论】:

    标签: php function preg-replace


    【解决方案1】:

    使用字符串。 PHP cannot handle such large integers 除非它们被转换为浮点数:

    整数的大小取决于平台,尽管有最大值 大约 20 亿是通常的值(即 32 位有符号)。 64 位平台的最大值通常约为 9E18。 PHP 确实 不支持无符号整数。整数大小可以使用来确定 常量 PHP_INT_SIZE,最大值使用常量 PHP_INT_MAX 自 PHP 4.4.0 和 PHP 5.0.5 起。

    在我的电脑中,PHP_INT_MAX 是 2147483647。

    总结一下,请比较:

    var_dump(121234123412341234, '121234123412341234');
    
    float(1.2123412341234E+17)
    string(18) "121234123412341234"
    

    【讨论】:

      【解决方案2】:

      在输入周围使用单引号

      echo preg_replace("/([0-9]{2})([0-9]{4})([0-9]{4})([0-9]{4})/", "$1 $2 $3 $4", '121234123412341234');
      

      输出

      12 1234 1234 12341234
      

      Codepad

      【讨论】:

      • 也是我的初衷,strval 也是变量的合适解决方案
      • @Joshua - strval() 究竟是一个怎样的解决方案?如果 PHP 无法存储一个非常大的整数,则无法通过将其转换为字符串来恢复它——那个值已经消失了。
      猜你喜欢
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多