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

Php 如何在DB中正确验证和存储价格?,php,laravel,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" p

我有一个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>
现在我不知道如何验证价格以及如何将价格存储在db中。在数据库中,我创建了“price”列作为小数。是否应将其插入数据库“2”或“2,00”

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

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

你的POST值似乎是浮动的,所以

使用正则表达式

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

如果不起作用,请告诉我

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

例如,如果您有15.50美元,您将存储1550美元(这适用于任何货币,而不仅仅是美元)。 请在此处阅读更多信息:

此外,如果您处理多个货币,请创建一个varchar字段来存储货币,如英镑、美元等。
有关货币代码的信息:

为什么在价格中使用逗号?任何具体原因。因为这不是一个好的实践,我认为,在这种情况下,您只需要数字值,如果使用数字格式的报告不起作用,您可以使用逗号delimeter?您的RDBMS是否有十进制数据类型?是的,它有十进制数据类型。使用验证程序对请求数据进行更改
$regex = "/^(?=.+)(?:[1-9]\d*|0)?(?:\.\d+)?$/";
$this->validate($request, [
   ...
    'registration_type_price' => 'required|regex:'.$regex,
 ]);