繁体   English   中英

php preg_match验证价格格式

[英]php preg_match validate price format

我想验证表单中的数字字段(价格)。
我试着以这种方式验证格式,如10.00 ,没关系。

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

if (preg_match($pattern, $_POST['price']) == '0') {
   echo "ERROR";
   exit;
}

现在我想验证, 同时 ,字段格式像10.0010 我怎么能这样做?

你的新模式:

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

将验证:

10
10.00

如果要使诸如05.00之类的零前导数字无效 ,以下模式将有所帮助:

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

如果你只是检查它是否是一个数字,is_numeric()在这里要好得多。 它比正则表达式更具可读性和快速性。

我快速启动一个函数来检查字符串或int是否是有效价格,如果没有,转换它。 最终输出始终是小数点后两位数的字符串,如1000.00

它删除减号/负号,逗号,空格和美元符号。 唯一的例外是,如果字符串包含任何字符,如将字符设置为is_numeric()为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM