如何在DB中正确验证和存储价格?

时间:2018-04-06 15:46:10

标签: php laravel

我有这个Html,用户可以在其中介绍价格:

<div class="form-group col-md-6">
    <label for="price">Price</label>
    <input type="number" min="1" step="any"
           required value="{{ old('price', '0.00€') }}"
           name="price" id="price" placeholder="Price (Ex: 10.00)"/>
</div>

我有这个jquery所以如果用户介绍例如输入中的“2”将显示为“2,00”:

document.getElementById("price").onblur =function (){
    this.value = parseFloat(this.value.replace(/,|\€/g, ""))
        .toFixed(2)
        .toString()
        .replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}

现在我怀疑如何验证价格以及如何在db中存储价格。在数据库中,我创建了“价格”列作为小数。它应该插入数据库“2”还是“2,00”?

在验证方法中如何验证价格是否具有有效格式?

$this->validate($request, [
       ...
        'registration_type_price' => 'required|double',
 ]);

2 个答案:

答案 0 :(得分:1)

您可以选择在视图中显示价格的方式。 但在DB中,您希望将货币存储为整数格式并存储分数。

例如,如果你有15.50美元,你将存储1550(这适用于任何货币,而不仅仅是美元)。 在此处阅读更多内容:migration guide

此外,如果您处理多种货币,请创建一个varchar字段来存储货币,如GBP,USD等。 有关货币代码的信息:Why not use Double or Float to represent currency?

答案 1 :(得分:0)

您的POST值似乎是浮动的,

使用正则表达式

$regex = "/^(?=.+)(?:[1-9]\d*|0)?(?:\.\d+)?$/";
$this->validate($request, [
   ...
    'registration_type_price' => 'required|regex:'.$regex,
 ]);

如果不行,请告诉我