Laravel验证URL名称和协议

时间:2019-01-16 23:36:07

标签: php laravel

我需要验证网址。我只需要允许主网址站点,例如:

http://example.com
https://example.com

我需要在我的网站上阻止这些网址:

http://example.com/page/blahblahblah
https://example.com/other/bloa

我使用正则表达式:

'url' => ['required', 'url', 'regex:/((http:|https:)\/\/)[^\/]+/']

用户插入网址时,他为什么可以插入http://example.com/page/blahblahblah?我的正则表达式无法正常工作。验证通过

2 个答案:

答案 0 :(得分:0)

您可以使用以下模式来确保URL不包含子目录:

^(?:\S+:\/\/)?[^\/]+\/?$

说明:

  

^声明字符串开头的位置

     

非捕获组(?:\ S +://)?

     

?量词-匹配0到1次,尽可能多地匹配,并根据需要返回(贪婪)

     

\ S +匹配任何非空白字符(等于[^ \ r \ n \ t \ f \ v])

     

+量词-匹配一次和无限次,并尽可能多地匹配,并根据需要返回(贪婪)

     

:匹配字符:字面意义(区分大小写)

     

/与字符/按字面值匹配(区分大小写)

     

/与字符/按字面值匹配(区分大小写)

     

匹配[^ /] +

下面的列表中不存在的单个字符      

+量词-匹配一次和无限次,并尽可能多地匹配,并根据需要返回(贪婪)

     

/与字符/按字面值匹配(区分大小写)

     

/?匹配字符/按字面值(区分大小写)

     

?量词-匹配0到1次,尽可能多地匹配,并根据需要返回(贪婪)

     

$声明字符串末尾的位置,或者在字符串末尾的行终止符之前(如果有的话)

答案 1 :(得分:0)

您可以编写自定义验证程序,并结合使用filter_var和parse_url?

以下内容将完成工作...

/order/cart/{cartId}/checkout