如何在PHP中使用正则表达式验证以下强制路径?
接受路径://somechars(以//开始,不以/结束)以下是有效的路径:
//depot/abc/pqr/a23/72-32/abc
//something
//something123
以下是无效路径:
///depot (has to start with // and more more slashes)
//depot/abc/ (cannot end with /)
//depot//test (cannot have // in between)
下面是我想出来的函数:
public function is_path_valid($path) {
if (!preg_match('/'/'/[A-Za-z0-9'-_'.]+.*[A-Za-z0-9'-_'.]$/',$path) ) {
return false;
}
return true;
}
是不正确的。谁能指出这里有什么问题吗?
您使用的模式匹配:
-
'/'/[A-Za-z0-9'-_'.]+
//
后至少有一个[A-Za-z0-9'-_.]
。但是,它可以匹配字符串中的任何地方,不一定是开头。 -
.*
中间允许有任何文字。这不是你想要的,对吧? -
[A-Za-z0-9'-_'.]$
以其中一个字符结束(该部分看起来不错)。
下面是你应该验证的内容:
-
^//
以//
开头(注意^
匹配行首的位置)。 -
[-.'w]+
后跟一个或多个-_.A-Za-z0-9
('w
是[A-Za-z0-9_]
的简写) -
(?:/[-.'w]+)*
后接/
和与之前相同的字符,重复0次或以上(注意(?: ..)
是非捕获组,量词*
重复整个组)。 -
$
直到行尾。
正则表达式:
if (!preg_match('~^//[-.'w]+(?:/[-.'w]+)*$~',$path) ) {
- <
- regex101演示/kbd>