我有这个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',
]);
答案 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,
]);
如果不行,请告诉我