php预匹配验证价格格式

php预匹配验证价格格式,php,Php,我想验证表单中的数字字段(价格)。 我尝试用这种方式验证格式,比如10.00,这样就可以了 $pattern = '/^\d+(:?[.]\d{2})$/'; if (preg_match($pattern, $_POST['price']) == '0') { echo "ERROR"; exit; } 现在我想同时验证字段格式,如10.00和10。 我怎么能这样做 您的新模式: $pattern = '/^\d+(\.\d{2})?$/'; 将验证: 10 10.00 如

我想验证表单中的数字字段(价格)。
我尝试用这种方式验证格式,比如
10.00
,这样就可以了

$pattern = '/^\d+(:?[.]\d{2})$/';

if (preg_match($pattern, $_POST['price']) == '0') {
   echo "ERROR";
   exit;
}
现在我想同时验证字段格式,如
10.00
10
。 我怎么能这样做

您的新模式:

$pattern = '/^\d+(\.\d{2})?$/';
将验证:

10
10.00
如果要使零前导数字(如05.00)无效,以下模式将有所帮助:

$pattern = '/^(0|[1-9]\d*)(\.\d{2})?$/';

如果只检查它是否是一个数字,这里的is_numeric()更好。它比正则表达式可读性更强,速度更快。

我快速编写了一个函数,用于检查字符串或int是否为有效价格,如果不是,则转换它。最终输出总是一个小数点后有两位数字的字符串,如
1000.00

它删除负号、逗号、空格和美元符号。唯一的例外是字符串包含任何字符(如字母)时,该字符将设置为false

以下是函数:

function convertToValidPrice($price) {
    $price = str_replace(['-', ',', '$', ' '], '', $price);
    if(!is_numeric($price)) {
        $price = null;
    } else {
        if(strpos($price, '.') !== false) {
            $dollarExplode = explode('.', $price);
            $dollar = $dollarExplode[0];
            $cents = $dollarExplode[1];
            if(strlen($cents) === 0) {
                $cents = '00';
            } elseif(strlen($cents) === 1) {
                $cents = $cents.'0';
            } elseif(strlen($cents) > 2) {
                $cents = substr($cents, 0, 2);
            }
            $price = $dollar.'.'.$cents;
        } else {
            $cents = '00';
            $price = $price.'.'.$cents;
        }
    }

    return $price;
}
下面是对它的测试:

var_dump(convertToValidPrice('100'));          // 100.00
var_dump(convertToValidPrice('-100'));         // 100.00
var_dump(convertToValidPrice(100));            // 100.00
var_dump(convertToValidPrice('$100'));         // 100.00
var_dump(convertToValidPrice('100.98'));       // 100.98
var_dump(convertToValidPrice('100.9'));        // 100.90
var_dump(convertToValidPrice('100.'));         // 100.00
var_dump(convertToValidPrice('1,00.98'));      // 100.98
var_dump(convertToValidPrice('1,000.98'));     // 1000.98
var_dump(convertToValidPrice('100.98829382')); // 100.98
var_dump(convertToValidPrice('abc'));          // null

完美的非常感谢你!对于需要数据库
十进制(10,4)
验证的用户:
/^\d{1,10}(?:\.\d{1,4})$/