如何格式化PHP中的字符串中的某些数字?

时间:2018-03-27 07:43:39

标签: php

我有字符串:

HAMMER FORGED (5.400PCE-2,340Kg-6.000M3-DANGER TYPE 2)

并希望将字符串格式化为

HAMMER FORGED (5,40PCE-2.340,00Kg-6M3-DANGER TYPE 2)

我知道的每个号码都可以使用number_format(),但是如何提取这些号码并将其放回正确的位置?

模式已修复:goods name (alpha num)跟随属性([qty][unit]-[weight]Kg-[volume]M3-type),角色动态长度

1 个答案:

答案 0 :(得分:0)

以下是layout-v23的一个解决方案。这有点令人费解,因为您还需要捕获浮点值之间的子串。

数字匹配是:

  1. 删除逗号(必要时)
  2. 转换为preg_replace_callback()
  3. float重新格式化(根据需要)
  4. 代码:(Demo

    number_float()

    输出:

    $string = 'HAMMER FORGED (5.400PCE-2,340Kg-6.000M3-DANGER TYPE 2)';
    
    echo preg_replace_callback(
        '~\(([\d.]+)([A-Z]+-)([\d,.]+)(Kg-)([\d.]+)~',
        function($m) {
            return 
                "(".
                number_format((float)$m[1], 2, ",", ".").
                "$m[2]".
                number_format((float)str_replace(",", "", $m[3]), 2, ",", ".").
                "$m[4]".
                number_format((float)$m[5], 0);
        },
        $string);
    

    Pattern Demo

    以下是与HAMMER FORGED (5,40PCE-2.340,00Kg-6M3-DANGER TYPE 2) 生成的$m数组相关的匹配项:

    preg_replace_callback()