Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式:如何验证路径不包含//_Php_Javascript_Regex_Path - Fatal编程技术网

Php 正则表达式:如何验证路径不包含//

Php 正则表达式:如何验证路径不包含//,php,javascript,regex,path,Php,Javascript,Regex,Path,我需要帮助为JavaScript.match和PHP preg_match创建一个正则表达式,该正则表达式验证指向具有国际字符(如åäøøæð等)的文件的unix类型绝对路径,以便: /路径/目的地/某处有效 /路径/tø/sömewhere有效 /路径/到//某处无效 路径/到/某处无效 /路径/到/某处/无效 正则表达式需要处理路径,而不考虑路径的深度/path/to或/path/to/where或/path/to/where/else 我有一个regexp,它将1到3标记为有效/^\/.+

我需要帮助为JavaScript.match和PHP preg_match创建一个正则表达式,该正则表达式验证指向具有国际字符(如åäøøæð等)的文件的unix类型绝对路径,以便:

/路径/目的地/某处有效 /路径/tø/sömewhere有效 /路径/到//某处无效 路径/到/某处无效 /路径/到/某处/无效 正则表达式需要处理路径,而不考虑路径的深度/path/to或/path/to/where或/path/to/where/else

我有一个regexp,它将1到3标记为有效/^\/.+[^\/]$/,问题是要使此regex不将3标记为有效,因为它包含//且中间没有任何其他字符。

这应该可以:

^/[^/]?$|^/[^/]([^/]|/[^/])*?[^/]$
它允许除/以外的任何字符,或a/后跟除/以外的任何字符。它还确保最后一个字符不是/,第二个字符也不是

最后,它使用/而不转义。要在PHP中使用它,不要使用/作为正则表达式分隔符–这只会使正则表达式难以读取。使用任何其他字符,例如:;要改为分隔表达式,请执行以下操作:

;^/[^/]?$|^/[^/]([^/]|/[^/])*?[^/]$;
编辑:为根路径/和由单个字母目录组成的路径添加了特殊处理。

这应该可以:

^/[^/]?$|^/[^/]([^/]|/[^/])*?[^/]$
它允许除/以外的任何字符,或a/后跟除/以外的任何字符。它还确保最后一个字符不是/,第二个字符也不是

最后,它使用/而不转义。要在PHP中使用它,不要使用/作为正则表达式分隔符–这只会使正则表达式难以读取。使用任何其他字符,例如:;要改为分隔表达式,请执行以下操作:

;^/[^/]?$|^/[^/]([^/]|/[^/])*?[^/]$;

编辑:为根路径/和由单个字母目录组成的路径添加了特殊处理。

这里实际上不需要正则表达式。在我看来,有三件事你需要确保:

字符串以/ 字符串不以/结尾,除非整个字符串/ 该字符串不包含的任何实例// 以上三项都可以通过字符串函数完成

在PHP中:

if ($string != '/' && ($string[0] != '/' || $string[strlen($string)-1] == '/' || strpos($string, '//') > -1))
{
  // string is invalid
}
在Javascript中:

if (string != '/' && (string.charAt(0) != '/' || string.charAt(string.length - 1) == '/' || string.indexOf('//') > -1))
{
  // string is invalid
}
资源:

PHP的函数 Javascript的特性和功能
这里真的不需要正则表达式。在我看来,有三件事你需要确保:

字符串以/ 字符串不以/结尾,除非整个字符串/ 该字符串不包含的任何实例// 以上三项都可以通过字符串函数完成

在PHP中:

if ($string != '/' && ($string[0] != '/' || $string[strlen($string)-1] == '/' || strpos($string, '//') > -1))
{
  // string is invalid
}
在Javascript中:

if (string != '/' && (string.charAt(0) != '/' || string.charAt(string.length - 1) == '/' || string.indexOf('//') > -1))
{
  // string is invalid
}
资源:

PHP的函数 Javascript的特性和功能
如果路径匹配^[^\/]\/\/\/\\/\\\/.\/$,则该路径无效。否则它是有效的。

如果路径匹配^[^\/]\/\/\/\/\\/.\/$,则它是无效的。否则它是有效的。

我认为这样做可以:

^(:?\/$|(:?\/[^/]+)+$)
也就是说,接受任何一个字符串,它要么是一个/,要么是由一个或多个重复的a/后跟一个或多个非/字符组成的序列

这使用了所有贪婪的量词,所以它应该是快速的;此外,对于性能,还考虑了^anchor


这是一个Javascript正则表达式。我不是PHP程序员,所以我不知道的主要事情是非捕获组语法是否在PHP中工作。此外,我不确定您将如何处理引用斜杠字符的问题。

我认为这样做可以:

^(:?\/$|(:?\/[^/]+)+$)
也就是说,接受任何一个字符串,它要么是一个/,要么是由一个或多个重复的a/后跟一个或多个非/字符组成的序列

这使用了所有贪婪的量词,所以它应该是快速的;此外,对于性能,还考虑了^anchor

这是一个Javascript正则表达式。我不是PHP程序员,所以我不知道的主要事情是非捕获组语法是否在PHP中工作。另外,我不确定如何处理斜杠字符的引用。

PHP的解决方案:

    $lines =  array(
        "/path/to/someWhere",
        "/path/tø/sömewhere",
        "/path/to//somewhere",
        "path/to/somewhere",
        "/path/to/somewhere/",
    );

    foreach($lines as $line){
        var_dump(preg_match('#^(/[^/]+)+$#',$line)); // dumps int(1) int(1) int(0) int(0) int(0) 
    }
PHP的解决方案:

    $lines =  array(
        "/path/to/someWhere",
        "/path/tø/sömewhere",
        "/path/to//somewhere",
        "path/to/somewhere",
        "/path/to/somewhere/",
    );

    foreach($lines as $line){
        var_dump(preg_match('#^(/[^/]+)+$#',$line)); // dumps int(1) int(1) int(0) int(0) int(0) 
    }

它不是正则表达式,但同样有效

str_replace('//', '/', $file)

它不是正则表达式,但同样有效

str_replace('//', '/', $file)

我喜欢这样的正则表达式帖子,对局外人来说,我们看起来都像spambot之类的东西。Unix/Linux路径名如果以斜杠或双斜杠结尾,实际上可以正常工作。我喜欢这样的正则表达式帖子,对于局外人来说,我们看起来都像Spambot之类的东西。Unix/Linux路径名如果以斜杠结尾或具有双斜杠,实际上可以正常工作。这与/不匹配,单斜杠是根目录的路径名。另外,非贪婪量词可能会导致性能问题。@Pointy:贪婪量词可能会导致性能问题。但是关于根路径的调用很好,这取决于正则表达式。使用贪婪量词可以显著减少回溯@Pointy:是的,但在这种情况下,没有嵌套的量词,所以灾难性的回溯不会发生,在这种情况下,它实际上为我们节省了一次回溯,因为最后一个字符不会被消耗,然后再次吐出来。我不是专家。有一天我需要试试正则表达式,伙计:-这不匹配/

,一个斜杠,它是根目录的路径名。另外,非贪婪量词可能会导致性能问题。@Pointy:贪婪量词可能会导致性能问题。但是关于根路径的调用很好,这取决于正则表达式。使用贪婪量词可以显著减少回溯@Pointy:是的,但在这种情况下,没有嵌套的量词,所以灾难性的回溯不会发生,在这种情况下,它实际上为我们节省了一次回溯,因为最后一个字符不会被消耗,然后再次吐出来。我不是专家。有一天我需要试用Regex Buddy:-由一个斜杠组成的路径名是有效的路径名。由一个斜杠组成的路径名是有效的路径名。由一个斜杠组成的路径名是有效的路径名。由一个斜杠组成的路径名是有效的路径名。该模式不匹配/,一个斜杠,这是一个有效的路径名。^/[^/]++$正是我想要的,当你看到它时,它非常简单。我忘了说我不想只验证/因为这个根级别有点像目录。这个regexp非常适合我的需要。Thanksnp,repeation rules,repeation rules模式不匹配的/,一个斜杠,这是一个有效的路径名。^/[^/]++$正是我想要的,当你看到它时,它非常简单。我忘了说我不想只验证/因为这个根级别有点像目录。这个regexp非常适合我的需要。Thanksnp,repeation rules,repeation rules这三个检查都不做,它只在一个条件下进行替换。我只是建议用str_replace来替换你的普通正则表达式,而不是用正则表达式发疯,制造一个次优的令牌灾难。考虑到OP中的正则表达式,是的,它会执行所需的操作。这不会执行所需的3项检查中的任何一项,它只会在一个条件下进行替换。我只是建议使用带str_replace的普通正则表达式,而不是疯狂地使用正则表达式,并造成次优的令牌灾难。考虑到OP中的正则表达式,是的,它会执行所需的操作。