繁体   English   中英

如何在Laravel 5.5中的URL验证中通过%?

[英]How to pass % in URL validation in 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 URL:

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

如果我从网址中删除% ,那么它就起作用了。 那么,如何才能验证URL以便在其中使用%符号?

编辑

这很奇怪:如果我完全删除了路由中的->where()检查,如果URL中有% ,它仍然无法正常工作。 怎么可能

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM