-2

問題

ユーザーは、へのリンクを送信できるフォームを送信できますsitea.com。ここでやりたいことは、ユーザーが実際に URL を送信したかどうかを確認することです。sitea.com

私が試したこと

URL が (正規表現を使用して) 正しいかどうかを確認しようとしましたが、sitea.com. しかし、誰でも?haha=sitea.comURL に追加しても一致する可能性があるため、これにはギャップがあります。そして、私は正規表現の達人ではないので、私の「解決策」はここで終わります。

私の質問

$_POST['url']実際に へのリンクかどうかを確認することはできsitea.comますか?

4

2 に答える 2

6

ここが一番いいと思いparse_url()ます。正規表現が機能する場合もありますが、組み込み関数が使用可能な場合は、正規表現を使用しないことをお勧めします。

私は次のようなことをします:

$url = '...';
$domain = implode('.', array_slice(explode('.', parse_url($url, PHP_URL_HOST)), -2));

if ($domain == 'sitea.com') {
    # code...
}

関数として:

function getDomain($url) 
{
    $domain = implode('.', array_slice(explode('.', parse_url($url, PHP_URL_HOST)), -2));
    if ($domain == 'sitea.com') {
        return True;
    } else {
        return False;
    }

}

テストケース:

var_dump(getDomain('http://sitea.com/'));
var_dump(getDomain('http://sitea.com/directory'));
var_dump(getDomain('http://subdomain.sitea.com/'));
var_dump(getDomain('http://sub.subdomain.sitea.com/#test'));

var_dump(getDomain('http://subdomain.notsitea.com/#dsdf'));
var_dump(getDomain('http://sitea.somesite.com'));
var_dump(getDomain('http://example.com/sitea.com'));
var_dump(getDomain('http://sitea.example.com/test.php?haha=sitea.com'));

出力:

bool(true)
bool(true)
bool(true)
bool(true)

bool(false)
bool(false)
bool(false)
bool(false)

デモ!

于 2013-09-07T21:48:28.837 に答える
3

これは正規表現の仕事ではなく、選択した言語の既存のツールの仕事かもしれません。 正規表現は、たまたま文字列が関係するすべての問題に手を振る魔法の杖ではありません。おそらく、既に作成、テスト、およびデバッグされた既存のコードを使用したいと思うでしょう。

PHP では、parse_url関数を使用します。

Perl:URIモジュール.

ルビー:URIモジュール.

.NET: 'Uri' クラス

于 2013-09-07T21:32:22.713 に答える