正则表达式:最后只允许一个斜杠?

时间:2012-04-03 18:55:07

标签: php regex preg-match php-5.3

如何使用正则表达式确保只有单斜杠结束URL或任何输入字符串的结尾?

$url = 'http://example.com//';
if(!preg_match('/\/$/', $url))
{
    echo 'the url must ends with a \'/\'';
}

这会接受两个或多个不正确的斜杠。

5 个答案:

答案 0 :(得分:2)

我认为你可以这样做:

~(?:[^/]|^)/$~

我还没有测试过,我的想法是测试字符串末尾/之前是否有/(并且在此版本中允许字符串的开头为好吧,所以"/"字符串也是有效的。

答案 1 :(得分:1)

你不是要求它只用一个/来结束;你所说的只是字符串的结尾必须有一个/

尝试(扩展格式:)

[^/]   # anything BUT a /
\/     # a /
$      # end of string

或采用常规压缩格式:

[^/]\/$

代替。

(顺便说一下:几乎每个网络服务器都不会关心你有一个额外的/...你可能不必这样做,或者如果你做内部应用,可能会遗漏很多角落案件。)

答案 2 :(得分:1)

尝试使用否定的lookbehind:

if(!preg_match('#(?<!\/)\/{0,1}$#',url) {
  ...

答案 3 :(得分:0)

您可以完全避免使用正则表达式:

$str = 'http://localhost//';
$dslash = '//';
if (substr_compare($str, $dslash, -2, 2) === 0)
   echo "Double slash\n"; // gets printed
else
   echo "No double slash\n";

答案 4 :(得分:0)

这是 Perl 代码,但 PHP 应该类似&gt;&gt;

#!/usr/bin/perl
$url = 'http://example.com//';
print "Error...\n" if $url =~ m/\/\/+$/;