【问题标题】:Regex preg_match issue with commas带有逗号的正则表达式 preg_match 问题
【发布时间】:2013-10-21 02:11:20
【问题描述】:

当金额如下所示时,这是我的 pre_match 代码:$ 99.00 并且有效

if (preg_match_all('/[$]\s\d+(\.\d+)?/', $tout, $matches))
{ $tot2 = $matches[0];
$tot2 = preg_replace("/\\\$/", '', $tot2);}

我需要为看起来像这样的金额(带逗号)做同样的事情:$ 99,00

感谢您的帮助(将点换成逗号没有帮助,有一个“转义”的东西我不明白......

理想情况下,我需要 preg_match 任何看起来像带有点或逗号的金额以及前后带有或不带有美元符号的数字(我知道,这有很多问题要问:),因为在我要扫描的结果表单上有电话和街道号码...

更新(出于某种原因,我无法对回复发表评论):为了正确测试,我需要用一个点 preg_replace 逗号(因为我们正在处理总和,我认为不能对带有逗号的数字进行计算它)。

所以为了澄清我的问题,我应该说:我需要转换,比如说“$ 200,24”到“200.24”。 (可以是 0.10 到 1000.99 之间的数量):

    $tot2 = preg_replace("/\\\$/", '', $tot2);}

(这段代码只处理$(它有效),我需要适应以处理(,)对(.)的变化)

【问题讨论】:

    标签: php regex preg-match preg-match-all


    【解决方案1】:

    不,使用, 代替\. 效果很好。

    只是您的输入没有像您的 . 那样在美元符号和金额 $ 99,00 之间包含空格。

    \s 设为可选。

    【讨论】:

      【解决方案2】:

      怎么样:

      $str='$ 200,24';
      echo str_replace(array('$',',',' '), array('','.',''), $str);
      

      输出:

      200.24
      

      【讨论】:

        【解决方案3】:

        替换 .具有字符类 [,.] 的字符,其中包括点 (.) 和逗号 (,)

        '/[$]\s\d+([.,]\d+)?/'
        

        编辑:注释正确,正则表达式已修复。

        【讨论】:

        • 你不需要在字符类中转义点。
        猜你喜欢
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        相关资源
        最近更新 更多