【问题标题】:Regex capture price endings .00 and ,00正则表达式捕获价格结尾 .00 和 ,00
【发布时间】:2018-12-04 22:57:13
【问题描述】:

我想 php preg_match 并删除所有价格结尾,但我的正则表达式不起作用。

例如,

1201203,00
123,123.23 
12.23
10.00
10

进入

1201203
123,123
12
10
10

这是我目前的正则表达式:

[,|.]\d{2}$

【问题讨论】:

    标签: php regex preg-replace price


    【解决方案1】:

    你的正则表达式基本上是正确的,虽然你的字符集中不需要|,它应该只是[,.](或者你可以使用(\.|,))。所以你可以使用preg_replace:

    $value = preg_replace('/[,.]\d{2}$/', '', $value);
    

    例如:

    $values = array('1201203,00', '123,123.23', '12.23', '10.00', '10');
    foreach ($values as &$value) {
        $value = preg_replace('/[,.]\d{2}$/', '', $value);
    }
    print_r($values);
    

    输出:

    Array (
        [0] => 1201203
        [1] => 123,123
        [2] => 12
        [3] => 10
        [4] => 10
    )
    

    Demo on 3v4l.org

    【讨论】:

    • 如果我想匹配除小数点或逗号之外的所有非数字,从右边开始 3 个字符怎么办?这可能吗?
    • 如果我理解正确的话,那就是[^\d,.] - 该字符集代表任何不是的字符(因为前导^)一个数字,@ 987654331@或.
    • 但前提是它从右边数第三个字符。因为 1,000,000.00 有逗号和小数。我需要 1000000.00
    • 假设您希望最后两个字符是您将使用的数字 [^\d,.]\d{2}$
    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 2016-02-24
    • 2019-03-26
    • 2011-01-04
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多