Laravel Routes正则表达式以@字符开头

时间:2018-05-17 14:41:49

标签: regex laravel

我需要创建一个响应任何以'@'字符开头的字符串的路由。路线如下例:

www.mywebsite.com/@john  
www.mywebsite.com/@jack  
www.mywebsite.com/@something

所以我写道:

Route::get('{something}','SomeController@someMethod')->where('something','/@^/');

但是当我测试它时,我面对404找不到找到的页面。

这是什么正确的正则表达式?

4 个答案:

答案 0 :(得分:2)

Route::get('/{tag}', 'SomeController@someMethod')->where('tag', '^@.*');

答案 1 :(得分:2)

这也有效:

Route::get('@{something}', 'SomeController@someMethod');

答案 2 :(得分:0)

你可以写这个

Route::pattern('tag', '@[a-zA-Z]');

Route::get('{tag}', 'SomeController@someMethod');

通过这种方式,你可以分离正则表达式和路由的逻辑,它可以按你的需要工作

答案 3 :(得分:0)

注意@^模式意味着@应该跟在字符串的开头,这是不可能的,并且模式永远不会匹配任何字符串。 '^@'模式断言字符串开头的位置,只有它才会尝试匹配@

此外,通常的/正则表达式分隔符应该从此模式中删除,因为它们被视为此处模式的一部分。

因此,在您的情况下,您可以只交换锚点和@ char:

Route::get('{something}','SomeController@someMethod')->where('something','^@');