在Laravel應用程序中,我有一個表單,我需要用逗號作爲小數點分隔符來驗證數字。目前,它只有一個點的作品,因爲我的驗證規則是:使用逗號作爲小數點分隔符來驗證數字的最佳方法是什麼?
$rules = [
'amount' => 'numeric|min:0',
];
什麼是最好的方法:
- 保持規則,並驗證之前更換點逗號?有沒有before_validation觀察者或類似的東西?
- 構建一個自定義驗證規則?例如法國的數字?
在Laravel應用程序中,我有一個表單,我需要用逗號作爲小數點分隔符來驗證數字。目前,它只有一個點的作品,因爲我的驗證規則是:使用逗號作爲小數點分隔符來驗證數字的最佳方法是什麼?
$rules = [
'amount' => 'numeric|min:0',
];
什麼是最好的方法:
Laravel支持驗證規則regex
模式,所以你可以用給定的模式匹配類似12,365.00
和它的建議使用正則表達式作爲一項規則
$rules = array('amount' => array('match:/^[0-9]{1,3}(,[0-9]{3})*\.[0-9]+$/'));
Check this link.時使用的陣列,而不是管另外,如果你想刪除任何理由的逗號然後check this answer。
基於來自The Alpha的優秀答案,下面是一個代碼片段,可以對浮點驗證進行配置。
這個片段添加到boot()
功能在你的AppServiceProvider
類(測試用Laravel 5.4):
Validator::extend('float', function ($attribute, $value, $parameters, $validator) {
$thousandsSeparator = env('APP_NUMBER_THOUSANDS_SEPARATOR') == '.' ? '\\' . env('APP_NUMBER_THOUSANDS_SEPARATOR') : env('APP_NUMBER_THOUSANDS_SEPARATOR');
$commaSeparator = env('APP_NUMBER_COMMA_SEPARATOR') == '.' ? '\\' . env('APP_NUMBER_COMMA_SEPARATOR') : env('APP_NUMBER_COMMA_SEPARATOR');
$regex = '~^[0-9]{1,3}(' . $thousandsSeparator . '[0-9]{3})*' . $commaSeparator . '[0-9]+$~';
$validate = preg_match($regex, $value);
if ($validate === 1) {
return true;
}
return false;
});
你.ENV文件將有這兩條線:
APP_NUMBER_COMMA_SEPARATOR="."
APP_NUMBER_THOUSANDS_SEPARATOR=","
與您的規則看起來像這樣:
$rules = [
'amount' => 'float|min:0',
];
注意:我只是escapi正確的.
。如果你打算使用在正則表達式語法中有特殊含義的字符(例如*或+),你也必須轉義它們。
但由於浮點數像550*345,00 (550,345.00)
或57+44 (57.44)
沒有意義我已經忽略了這個問題。
親切的問候
如何使用?缺乏答案,因爲它給了我'方法[validateMatch]不存在。 ' –
@StormSpirit:用'regex'替換'match',它應該可以工作。 –