laravel url validation umlauts

sho*_*ild 10 php laravel laravel-validation

我想在laravel验证网址.我的规则包含

"url" => "required|url"
Run Code Online (Sandbox Code Playgroud)

这很有效.但是当用户使用变音符号提交URL时,规则检查将始终失败.

像öäü等字符在德国域名中有效.Laravel有没有办法在网址中接受这些字符?

luk*_*ter 7

Laravel使用filter_var()FILTER_VALIADTE_URL选项不允许使用变音符号.您可以编写自定义验证程序,也可以将regex验证规则与正则表达式结合使用.我相信你会在这里找到一个

"url" => "required|regex:".$regex
Run Code Online (Sandbox Code Playgroud)

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

"url" => array("required", "regex:".$regex)
Run Code Online (Sandbox Code Playgroud)

或者,正如@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!
}
Run Code Online (Sandbox Code Playgroud)


sho*_*ild 5

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

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

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

我的规则现在包含:

"url" => "required|german_url,
Run Code Online (Sandbox Code Playgroud)

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

    "german_url"            => ":attribute is not a valid URL",
Run Code Online (Sandbox Code Playgroud)