news/:id\d 规则表示当URL中id参数为数字时才会匹配
而 news/:name 规则定义 则会匹配所有的字符情况,这也是默认的情况,目前规则路由只区分数字和所有字符的情况,如果需要严格的类型约束,请采用正则路由定义规则。于是修改了一下tp的代码,增加了全字母和全汉字的规则\w 和 \c修改文件:ThinkPHP/Lib/Behavior/CheckRouteBehavior.class.php
大约在73行处找到
>
if('d'==$type && !is_numeric($m1[$key])) {
$match = false;
break;
}在下面添加/*自己加的验证规则,匹配字母*/
if('w' == $type && !preg_match('/^[a-zA-Z]+$/', $m1[$key])){
$match = false;
break;
}
/*自己加的验证规则,匹配中文( 不包括中文标点)*/
if('c' == $type && !preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $m1[$key])){
$match = false;
break;
}这里就加了两种规则路由,如果更复杂只好自己用正则路由了。。。或者自己加个规则 最佳答案