在 The Alpha 的出色答案的基础上,这里有一个代码 sn-p 可配置浮动验证。
将此 sn-p 添加到 AppServiceProvider 类中的 boot() 函数中(使用 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',
];
注意:我只是正确地转义了.。如果您要使用在正则表达式语法中具有特殊含义的字符(如 * 或 +),您也必须转义它们。
但由于像550*345,00 (550,345.00) 或57+44 (57.44) 这样的浮点数 没有意义,所以我忽略了这个问题。
亲切的问候