3

ドメインにpreg_matchとREGEXを含むGETパラメーターがあるかどうかを検証しようとしています。これは、私の目的のために必要です。

私が働いているのは、次のようなGETパラメータなしでドメインを検証することです。

if (preg_match("/^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}$/", 'domain.com')) {
        echo 'true';
} else {
        echo 'false';
}

私はこのテストに当てはまります。

ここまでは順調ですね。私が問題を抱えているのは、GETパラメータを追加することです。私が試した多くの正規表現の中には、まだ運がないものがあります。

if (preg_match("/^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}([/?].*)?$/", 'domain.com?test=test')) {
        echo 'true';
} else {
        echo 'false';
}

ここでfalseが返されるため、必要なGETパラメーターを使用してドメインを検証できません。

どんな援助も大歓迎です^^

よろしく

4

3 に答える 3

3

このコードはテストされていませんが、機能するはずです。

$pattern = "([a-z0-9-.]*)\.([a-z]{2,3})"; //Host
$pattern .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; //Get requests
if (preg_match($pattern, 'domain.com?test=test')) {
        echo 'true';
} else {
        echo 'false';
}
于 2012-10-03T08:44:48.727 に答える
1

正規表現を使用する利点は何ですか?

なぜだけではないのですか

<?php
$xGETS = count($_GET);
if(!$xGETS)
{
    echo 'false';
} else {
    echo 'true';
}

// PHP 5.2+ 

$xGETS = filter_var('http://domain.com?test=test', FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED);
if(!$xGETS)
{
    echo 'false';
} else {
    echo 'true';
}
于 2012-10-03T09:01:18.713 に答える
0

最初の正規表現は、いくつかの有効なドメイン名(たとえば、museumおよびtravelTLDと大文字を含むドメイン名から)を拒否し、いくつかの無効なドメイン名(たとえば、ラベルまたはドメイン名全体が長すぎる場合)を認識します。

これで問題がない場合は、最初の疑問符を検索して、プレフィックスをドメイン名として扱い、サフィックスを「GETパラメータ」(実際にはクエリ文字列と呼ばれる)として扱うこともできます。

これがうまくいかない場合は、ドメイン名とラベルの長さの制約のため、単純な正規表現ではドメイン名を検証するのに十分ではありません。

于 2012-10-03T09:02:03.487 に答える