php - 如何在 php 中使用正则表达式检查数组上的 url?
问题描述
首先,我尝试了与该主题相关的所有问题和答案。此外,我尝试了相关问题并尝试解决但没有成功。所以请仔细阅读我的问题。
如何使用正则表达式模式检查 url 在我的路由上是否有效?
此代码不编写 "Core PHP"
任何框架。
$routes = [
'PUT' =>
[
'/order/{id}' => 'updateOrder'
],
'GET' =>
[
'/order' => 'getOrder',
'/order/{id}' => 'getOrder',
'/order/status/{id}' =>'getOrderStatus'
],
'POST' =>
[
'/order' =>'createOrder'
],
'DELETE' =>
[
'/order/{id}' => 'deleteOrder'
]
];
我的网址喜欢:
1) '/订单/BPQ153'
2) '/订单/状态/BPQ123'
3) '/订单'
解决方案
您可以简单地遍历路线并找到第一个匹配的路线。请注意,下面代码中的外部循环只是因为我正在检查您一次提供的所有示例 URL:
$routes = [
'PUT' =>
[
'/order/{id}' => 'updateOrder'
],
'GET' =>
[
'/order' => 'getOrder',
'/order/{id}' => 'getOrder',
'/order/status/{id}' => 'getOrderStatus'
],
'POST' =>
[
'/order' => 'createOrder'
],
'DELETE' =>
[
'/order/{id}' => 'deleteOrder'
]
];
$urlsToCheck = [
'/order/BPQ153',
'/order/status/BPQ123',
'/order',
];
foreach ($urlsToCheck as $url) {
foreach ($routes as $method => $methodValues) {
foreach ($methodValues as $route => $function) {
// match ID to everything that is not a slash
$regex = str_replace('{id}', '([^\/]+)', $route);
if (preg_match('@^' . $regex . '$@', $url)) {
echo "The URL $url matches on $method HTTP method for function $function.";
echo PHP_EOL;
}
}
}
}
这输出:
The URL /order/BPQ153 matches on PUT HTTP method for function updateOrder.
The URL /order/BPQ153 matches on GET HTTP method for function getOrder.
The URL /order/BPQ153 matches on DELETE HTTP method for function deleteOrder.
The URL /order/status/BPQ123 matches on GET HTTP method for function getOrderStatus.
The URL /order matches on GET HTTP method for function getOrder.
The URL /order matches on POST HTTP method for function createOrder.
如您所见,我没有检查特定的 HTTP 方法,但您必须根据当前使用的 HTTP 方法在其中添加额外的检查。然而,这不是问题的一部分,所以我只是为了完整起见在这里提到它。
PS:对于更简洁的代码,您当然可以将其放入函数/方法/类中,我只是在这里尽量保持代码简短。
推荐阅读
- linux - 使用awk解析转换如下日志
- kubernetes - GKE 中的私有集群如何对同一子网中的 GCP 计算实例 (VM) 进行身份验证?
- wordpress - Wordpress 中的联系表格 7 - 如何隐藏电子邮件中的空白字段?
- reactjs - 无法让 npm 运行启动 testcafe 的脚本
- lua - 为什么这段代码意味着所有表共享一个元表
- javascript - jQuery 在单击下一步时显示和隐藏表单
- azure - 将 DataFactory 连接到 Lotus notes DB
- powerbi - Power BI - 应用筛选器时,度量随机返回空白
- javascript - 参数值未在 JavaScript 中传递
- node.js - 如何将流通过管道传输到节点中的文件描述符?