2012-02-20 3 views
0

まず、他の正規表現のスレッドをいくつかチェックアウトしました。これは、「Regexを使用してURLを検証するにはどうすればよいですか?括弧とカレットを含む正規表現の問題を含むURLを検証する

参照URLがhttpまたはhttpsであるか、「サブドメイン」が「ステージング」、「www」または「検索」で構成されているかどうかを確認しています。

^(https|http)://(staging|www|search).mysite.com 

は、(この問題が解決された、編集後の新しい質問)私は信じている私が午前問題は、開口部のキャレットに隣接して括弧を必要とします。

アイデア?

また、.comの後に何か許可する方法はありますか?何らかの理由で、URLの前に文字を入れることができます。たとえば、http://staging.mysite.comはまだ動作しますが、これはなぜですか?

編集:元の問題が修正されたため、私のブラウザが元の正規表現のスクリプトをキャッシュしている可能性があります。

私の唯一の質問は、2http://staging.mysite.comが検証されないようにする方法です。キャレットは、文字列がhttpまたはhttpsで始まらなければならないことを意味します。

は私がするpreg_matchをやっていると私は単なる文字列が上記の要件が含まれているかどうかをチェックだが、それは実際には魅力のようにhttpまたはhttpsで

+0

エラーは何ですか?カッコは問題ありません。 (あなたのドットは大したことではないがすべてにマッチしている)。スラッシュをエスケープしてみてください。 '\ /' – sweaver2112

+0

@ sweaver2112何らかの理由で、URLがhttpまたはhttpsで実際に開始しない場合でも、文字列はpreg_matchで検証されます。つまり、私はhttpの前に何でも追加することができ、URLの残りの部分が前提条件と一致していれば、正規表現は正しくないとは限りません。 – Eric

+0

文字列の先頭を以下に示すようにパターンに追加してください: '^' – Basti

答えて

1
$string = "https://www.mysite.com/foo/bar"; 

preg_match("~^(https|http)://(staging|www|search)\.mysite.com~", $string, $matches); 

var_dump($matches); 

array 
    0 => string 'https://www.mysite.com' (length=22) 
    1 => string 'https' (length=5) 
    2 => string 'www' (length=3) 

作品を起動するかどうかをチェックされていないと思います。パターンの終了を要求しない場合は($を使用)、任意の文字が続きます。 2http://は、^を使用して文字列(https | http)で始まる必要があるため動作しません。

+0

ありがとうございました!私は、正規表現が始まり、〜で終わる理由を調べなければならないでしょうが、あなたの時間と援助に感謝します。 – Eric

+0

は任意です。あなたが好きな場合は、スラッシュを使用することができます。 'preg_match("/^(https | http):\/\ /(ステージング| www | search)\。mysite.com/ "、$ string、$のように、スラッシュをエスケープする必要があります。マッチ); ' – Basti

関連する問題