使用正则表达式比较 php 中的两个价格字符串

Azi*_*ima 1 php regex string

假设我们有两个不同格式的价格字符串:

$s_price = '85.95' or '1500.00'
$r_price = '$ 85.95' or '1,500'
Run Code Online (Sandbox Code Playgroud)

但所有这些价格都是相同的并且应该匹配。

我有一个正则表达式可以做到这一点,但不知道我们是否这样做:

(\d+)*(,)?\d+(.)?\d*
Run Code Online (Sandbox Code Playgroud)

Tok*_*ger 5

要从 PHP 中的字符串检索并解析浮点数,请使用该floatval()方法。

对于符号,这取决于您是否始终对货币使用相同的约定(逗号表示千位分隔符,点表示小数)。在这种情况下,您应该使用该方法删除除点之外的非数字preg_replace()(相应的正则表达式可以是/[^0-9.]/)

<?php

function sanitize($price) {
    return floatval(preg_replace('/[^0-9.]/', '', $price));
}

$a1 = '85.95';
$a2 = '1500.00';
$b1 = '$ 85.95';
$b2 = '1,500';

sanitize($a1); // (float) 85.95
sanitize($a2); // (float) 1500
sanitize($b1); // (float) 85.95
sanitize($b2); // (float) 1500

sanitize($a1) === sanitize($b1); // (bool) true
sanitize($a2) === sanitize($b2); // (bool) true
sanitize($a1) <= sanitize($a2); // (bool) true
sanitize($b1) >= sanitize($b2); // (bool) false
Run Code Online (Sandbox Code Playgroud)

希望它会有所帮助!