codeigniter 路由可通过内置通配符(如 :num、:alpha)或正则表达式精准限制参数类型,需注意匹配顺序、版本差异(ci3用$route数组,ci4用$routes->get)及测试方法。

CodeIgniter 路由本身不直接提供“仅字母”或“仅数字”的强制校验机制,但可以通过内置通配符或正则表达式精准控制参数匹配范围,从而实现限制效果。关键在于:用对占位符、避免泛化规则前置、注意 CI 版本差异。
用内置通配符快速限制
CI3 和 CI4 都支持简洁的预定义占位符,适合常见场景:
-
(:num):只匹配一个或多个数字(如
123、007),不接受字母或符号 -
(:alpha):只匹配一个或多个纯英文字母(如
abc、XyZ),区分大小写,不接受数字或下划线 -
(:alphanum):匹配字母和数字组合(如
user123、ABC99),不含空格、点、连字符等
示例(CI3):$route['product/(:num)'] = 'catalog/item/$1';
访问 /product/456 ✅ 匹配成功;/product/abc ❌ 404
用正则表达式精细控制(含大小写敏感)
当需要更严格或定制化规则时(比如“必须含大写字母+数字”、“禁止下划线”),应使用正则表达式:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
([a-zA-Z]+)→ 仅大小写字母,至少一个 -
([0-9]+)→ 仅数字,至少一个(等价于(:num),但更明确) -
([a-z][a-z0-9_\-]*)→ 小写开头,后续可接小写字母、数字、下划线、短横线 -
([a-zA-Z0-9]+)→ 大小写字母 + 数字,无其他字符(即:alphanum的显式写法)
示例(CI3):$route['profile/([a-zA-Z0-9]+)'] = 'users/view/$1';/profile/JohnDoe123 ✅;/profile/jane@doe ❌(@ 不在字符集中)
注意顺序与版本兼容性
路由是**从上到下顺序匹配**,一旦命中即停止。泛化规则(如 (:any) 或宽泛正则)必须放在具体规则之后,否则会覆盖精确限制:
- ✅ 正确顺序:
$route['user/(\d{4})'] = 'admin/yearly_report/$1';$route['user/(:any)'] = 'users/profile/$1'; - ❌ 错误顺序:
$route['user/(:any)'] = 'users/profile/$1';← 先匹配,后面所有user/xxx都进不去
另外:
– CI3 使用 $route[...] 数组写法,正则直接写在 key 中;
– CI4 已弃用该方式,须改用 $routes->get('user/([0-9]+)', 'Users::show'); 等方法,且正则需符合 PSR-7 URI 解析逻辑。
验证是否生效的小技巧
不要依赖浏览器缓存测试,尤其涉及重定向或 404 时:
- 用隐身窗口或
curl -I http://yoursite.com/your/route查状态码 - CI4 可运行
php spark routes查看已注册路由列表,确认规则是否被加载 - CI3 可临时在
routes.php开头加die('routes loaded');确认文件被读取










