如何在Laravel 5.5中传递%的URL验证?

时间:2018-05-08 11:14:01

标签: php laravel-5.5

我有以下路线:

Route::get('/delete/{var}',
    'MyController@delete')
    ->where("var", "[A-Za-z0-9\-\.\%]+");

我的问题是我想允许%var一起传递。不幸的是,以下两个选项对我来说没有用处:

"[A-Za-z0-9\-\.\%]+"
"[A-Za-z0-9\-\.%]+"

我正在尝试传递folliwng网址:

domain.tld/delete/something.com%2Fhtml%2Fsomestring%2Ffolder

如果我从网址中删除了%,那就可以了。那么我如何验证网址以便在其中使用%签名?

修改

这很奇怪:如果我完全删除路线中的->where()支票,那么如果网址中有%,它仍然无效。怎么会这样?

1 个答案:

答案 0 :(得分:0)

Laravel使用filter_var() with the FILTER_VALIADTE_URL`选项,不允许使用变音符号。您可以编写自定义验证程序,也可以将正则表达式验证规则与正则表达式结合使用。

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

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

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

例如

$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!
}