php - 如何使用 PHP preg_match 检查 URL 的结构?
问题描述
我所有网站的 URL 都具有以下结构:
https://www.example.com/section/item
其中section是一个单词,item是一个数字。
因此,可能的 URL 是:
https://www.example.com/section
https://www.example.com/section/item
通过 .htaccess,所有请求都转到index.php(路由)。
如果用户键入以下内容,我想显示 404 错误消息:
https://www.example.com/section/item/somethingelse
为了检查 URL 的结构,如何在以下函数中正确更改模式?
function isValidURL($url) {
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}
谢谢。
解决方案
如果 section 是一个单词(并且不能包含数字),并且 item 是一个数字,则可以使用[^\W\d]+
and匹配除数字之外的单词字符\d+
来匹配 1+ 位。
与示例数据一样,有可选部分,您可以替换(/.*)?$
为(?:/[^\W\d]+(?:/\d+)?)?$
.
解释
(?:
非捕获组/[^\W\d]+
对于部分,匹配 1+ 次除数字之外的单词字符(?:/\d+)?
对于项目,可选匹配/
和 1+ 位数字
)?
关闭非捕获组并使其可选
如果 section 可以是一个也可以只包含数字的单词,你也可以使用\w+
模式可能看起来像
^https?://[a-z0-9-]+(?:\.[a-z0-9-]+)*(?::[0-9]+)?(?:/[^\W\d]+(?:/\d+)?)?$
注意转义点以匹配它的字面意思。
推荐阅读
- vue.js - 在 vuejs 女巫类中传递多个属性
- python - 使用 Python/Flask 进行 MySQL 查询
- javascript - 服务器崩溃:Node.js socket.io 异步?
- c# - 将值从 Angular 服务应用程序发送到 C# 后端控制器
- flask - Flask-LDAP3-Login 过滤器问题 - 用户无法登录
- javascript - 传递“这个”的麻烦
- android - onCreate() 和 onDestroy() 不是对称的?
- python-3.x - Python读写数据列无效语法错误
- gradle - Gradle Kotlin DSL:获取另一个项目的 sourceSet
- javascript - 用于打印 SIMPLE 的 Javascript 函数