如何使用PHP preg_match检查URL的结构?
How to check the URL's structure using PHP preg_match?
我网站的所有 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]+
和 \d+
来匹配除数字以外的单词字符以匹配 1+ 个数字。
由于示例数据中有可选部分,您可以将 (/.*)?$
替换为 (?:/[^\W\d]+(?:/\d+)?)?$
。
说明
(?:
非捕获组
/[^\W\d]+
对于 section,匹配 1+ 次除数字之外的单词字符
(?:/\d+)?
对于项目,可选择匹配 /
和 1+ 位
)?
关闭非捕获组并使其可选
如果section可以是一个单词,也可以只包含数字,你也可以使用\w+
模式可能看起来像
^https?://[a-z0-9-]+(?:\.[a-z0-9-]+)*(?::[0-9]+)?(?:/[^\W\d]+(?:/\d+)?)?$
注意转义点以使其与字面匹配。
我网站的所有 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]+
和 \d+
来匹配除数字以外的单词字符以匹配 1+ 个数字。
由于示例数据中有可选部分,您可以将 (/.*)?$
替换为 (?:/[^\W\d]+(?:/\d+)?)?$
。
说明
(?:
非捕获组/[^\W\d]+
对于 section,匹配 1+ 次除数字之外的单词字符(?:/\d+)?
对于项目,可选择匹配/
和 1+ 位
)?
关闭非捕获组并使其可选
如果section可以是一个单词,也可以只包含数字,你也可以使用\w+
模式可能看起来像
^https?://[a-z0-9-]+(?:\.[a-z0-9-]+)*(?::[0-9]+)?(?:/[^\W\d]+(?:/\d+)?)?$
注意转义点以使其与字面匹配。