【问题标题】:Consider locale (separators) for laravel validator numeric rule考虑 laravel 验证器数字规则的语言环境(分隔符)
【发布时间】:2020-10-27 13:37:31
【问题描述】:

我使用 laravel 的本地化功能来本地化我的应用程序。当我将语言环境设置为德语 (de)(使用 App::setLocale())并使用验证器规则 'amount' => ['required', 'numeric', 'min:0'],验证“100000,00”时出现验证错误。 “100000.00”有效。

问题是,小数点分隔符应该取决于语言环境:“。” (点)表示英语,“,”表示德语。

此外,“数字”规则根本不允许千位分隔符。应该允许。点还是逗号又取决于语言环境。

知道如何以干净的方式解决这个问题吗?

【问题讨论】:

  • 我相信您可以实施自定义验证规则,并围绕这篇文章 (stackoverflow.com/questions/437371/…) 构建解决方案。
  • 感谢库尔特!我也是这么想的。我只是想知道,这个问题是否已经以一种优雅的方式解决了。不敢相信我是唯一一个使用 laravel 本地化网站的人。:-)

标签: laravel laravel-validation laravel-localization laravel-7.x


【解决方案1】:

根据 Laravel 文档,我找到了以下解决方案:

在 AppServiceProvider.php 的 boot() 方法中,像这样扩展 Validator:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
  /* validate international number format rule (depending on locale) */
  Validator::extend('intl_num', function ($attribute, $value, $parameters, $validator) {
      $numberFormatter = new \NumberFormatter(App::getLocale(), \NumberFormatter::DECIMAL);

      $num = $numberFormatter->parse($value);
      return ($num === false) ? false : true;
  });
  }
}

现在我们可以使用规则“intl_num”进行验证,例如在 FormRequest 类的 rules() 方法中。

【讨论】:

  • "5jklnljkkl8" 计算结果为 true。这一点都不好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多