Regex: разрешить только одну косую черту в конце? - PullRequest
0 голосов
/ 03 апреля 2012

Как можно использовать регулярные выражения, чтобы убедиться, что только одиночная косая черта является концом конца URL или любой входной строки?

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

Это допускает две или более косых черт, что неверно.

Ответы [ 5 ]

2 голосов
/ 03 апреля 2012

Я думаю, что вы можете сделать так:

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

Я не проверял это, идея состоит в том, чтобы проверить, нет ли / перед / в конце строки(и в этой версии также разрешено начало строки, поэтому строка "/" также допустима.

1 голос
/ 03 апреля 2012

Попробуйте использовать отрицательный вид сзади:

if(!preg_match('#(?<!\/)\/{0,1}$#',url) {
  ...
1 голос
/ 03 апреля 2012

Вы не просите, чтобы это закончилось только одним /; все, что вы сказали, это то, что конец строки должен иметь / перед ним.

Попробуйте (в расширенном формате:)

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

или в обычном сжатом формате:

[^/]\/$

вместо.

(В качестве отступления: почти каждый веб-сервер не будет заботиться о том, что у вас есть дополнительный /... вам, вероятно, не нужно делать это, или если вы делаете для внутреннего приложения, вероятно, отсутствует много угловые шкафы.)

0 голосов
/ 03 апреля 2012

Это код Perl , но PHP должен быть похожим >>

#!/usr/bin/perl
$url = 'http://example.com//';
print "Error...\n" if $url =~ m/\/\/+$/;
0 голосов
/ 03 апреля 2012

Вы можете полностью исключить использование регулярных выражений следующим образом:

$str = 'http://localhost//';
$dslash = '//';
if (substr_compare($str, $dslash, -2, 2) === 0)
   echo "Double slash\n"; // gets printed
else
   echo "No double slash\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...