2011-12-27 7 views
1

私はこれまでにこのコードを持っています。そのコードの前にhttp://が付いているかどうかをチェックし、例えば "google.co.uk"その前にhttp://を追加します。入力された文字列がURLであることを徹底的にチェックしています

しかし、人々が「こんにちは」をつけると、その前にhttp://が追加され、URLとしてカウントされます。私は終わりに接尾辞があることを確認する何かが必要です。

function checkURL($url) { 

if (empty($url)) 

{ 
    return $url; 


} 
else { 

if (preg_match('[a-z0-9-]i', $url)) { 

    return $url; 

    } else { 

if (preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url)) { 
return $url; 

} 
else { 

    $url = 'http://'.$url.''; 
    return $url; 
    } 

}

そしてそれに一度、別の簡単なチェックが返される

助けてください!

+0

は、ユーザーがクエリ文字列にURLを入力するような状況を占めたことがありますか? –

+0

いいえ、なぜそれは問題でしょうか? – HarryBeasant

+0

という性質上、リンク参照は、検証しようとしている接尾辞であるTLD - .edu、.com、.orgなどで終わります。しかし、クエリーストリングはそのロジックにレンチを投げます。これは、URLがTLDで終わらないことを意味するためです。その結果、接尾辞を確認できますが、接尾辞はテキストの最後であってはなりません。あるいは、 "?"を使ってテキストを爆発させることもできます。デリミタとして使用し、ロジックを適用することができます。これでも動作するはずです –

答えて

4

で出しました。この

使用:

if (filter_var('someurl.com', FILTER_VALIDATE_URL) === true) { 

http://php.net/manual/en/function.filter-var.php

+0

申し訳ありませんが、私はfilter_varにそのオプションが存在するかどうかはわかりませんでした。 –

+0

これは、接尾辞ではなくhttp://のみを検証します。 – HarryBeasant

+0

@ user1063679 filter validate urlは「http://の検証のみ」よりも少し複雑です。http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?view =マークアップ – dqhendricks

0

このために良い正規表現は、車輪を再発明していないJohn Gruber here

+0

これはpreg_match関数で使用できますか? – HarryBeasant

関連する問題