【问题标题】:laravel url validation umlautslaravel url 验证变音符号
【发布时间】:2023-03-18 15:23:01
【问题描述】:

我想在 laravel 中验证 url。我的规则包含

"url" => "required|url"

这很好用。但是当用户提交带有变音符号的网址时, 规则检查总是会失败。

öäü 等字符在德语域中有效。 Laravel 有没有办法在 url 中接受这些字符?

【问题讨论】:

  • 我唯一能想到的就是使用正则表达式编写自定义规则,或者您可以查看 url 规则在框架中的工作原理并实现您自己的版本,扩展它?跨度>
  • 除了编写自定义验证器之外,一种解决方法可能是在验证之前 str_replace 变音符号。 str_replace(['ä','ö','ü'],['ae','oe','ue'],$request->url)

标签: php laravel laravel-validation


【解决方案1】:

Laravel 使用 filter_var() 和不允许变音符号的 FILTER_VALIADTE_URL 选项。您可以编写自定义验证器或将regex 验证规则与正则表达式结合使用。我相信你会找到一个here

"url" => "required|regex:".$regex

或者更好地将规则指定为数组以避免特殊字符出现问题:

"url" => array("required", "regex:".$regex)

或者,正如@michael 指出的那样,只需在验证之前替换变音符号。只要确保你之后保存真实的:

$input = Input::all();
$validationInput = $input;
$validationInput['url'] = str_replace(['ä','ö','ü'], ['ae','oe','ue'], $validationInput['url']);
$validator = Validator::make(
    $validationInput,
    $rules
);
if($validator->passes()){
    Model::create($input); // don't use the manipulated $validationInput!
}

【讨论】:

    【解决方案2】:

    感谢@michael 和@lukasgeiter 为我指明了正确的方向。 我决定发布我的解决方案,以防有人遇到同样的问题。

    我创建了一个自定义验证器,例如:

       Validator::extend('german_url', function($attribute, $value, $parameters)  {
           $url = str_replace(["ä","ö","ü"], ["ae", "oe", "ue"], $value);
           return filter_var($url, FILTER_VALIDATE_URL);
       });
    

    我的规则现在包含:

    "url" => "required|german_url,
    

    另外不要忘记将规则添加到您的 validation.php 文件中

        "german_url"            => ":attribute is not a valid URL",
    

    【讨论】:

      猜你喜欢
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多