You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel路由匹配限制前缀Slug问题:仅匹配特定格式参数

Laravel路由正则匹配修正方案

你的路由正则表达式存在两个问题,导致不符合预期的参数也能匹配:

  • 错误使用字符集[sh|br],它会匹配s、h、|、b、r中的任意单个字符,加上+后允许多个这类字符组合,所以shxyz的前几个字符能被匹配;
  • 未用^和$锚定参数首尾,导致参数前后有多余字符时,只要中间包含符合部分规则的片段就会匹配。

修正后的正则需要精确限定参数的完整格式,确保只有sh-数字或br-数字的参数能通过匹配:

Route::match(['GET', 'POST'], '/create/{caller?}', 'create')
    ->name('elot.create')
    ->where('caller', '^(sh|br)-\d+$');

正则说明:

  • ^:匹配参数的起始位置
  • (sh|br):精确匹配sh或br二选一
  • -:匹配固定的连字符分隔符
  • \d+:匹配一个或多个数字(等价于[0-9]+)
  • $:匹配参数的结束位置

这样修改后,http://localhost/create/sh-26627、http://localhost/create/br-1525会正常匹配,而shxyz-1234、brxyz-1234这类带多余字符的参数会被路由拒绝。

内容的提问来源于stack exchange,提问作者Ray Carnegie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:34:59