2011-07-28 13 views
0

私は訪問者がサイトのホームページに正確にいることを確認したいと思います。 は、URLがある場合に一致させるために、この正しいです:preg_match urlのスラッシュ

  • www.site.com
  • www.site.com/
  • www.site.com/index.php

    preg_match("/^(www.)?(".$host.")(\/)?(index.php)?$/", $url, $matches) 
    

最後の2つのマッチをこのように区切るのが形式的に正しいとは思われませんが、動作します。 さらにwww.site.comをwwにリダイレクトしないブラウザがありますw.site.com/?

+1

いいね。 '()'で多くのキャプチャグループを実行します。あなたは完全に私が思うグループを取り除くことができます。しかし、あなたが心配している場合は、それらを非取得グルー​​プ '(?:)'(Perlの正規表現に従って)とすることを考えましたか? – kevlar1818

答えて

1

閉じる。私はこの代わりとなるだろう。ここ

preg_match("/^(?:www\.)?(?:".$host.")(?:\/(?:index\.php)?)?(?:\?.*)?$/", $url, $matches) 

違いは次のとおりです。

.文字のエスケープ
  • は、リテラルのドットを意味し(ドットは通常、正規表現で「\nまたは\r以外の任意の文字」を意味します)。
  • index.phpの前に/が必要です。index.phpが存在する場合。
  • オプションでGETパラメータ(\?.*部分)を許可します。
  • キャプチャしていないグループは、キャプチャを行うことに関心があると思われないためです。

それ以外は、私にはよく見えます。

+0

ありがとう!特にドット1の場合 –

関連する問題