7

Hi I would like to validate this following urls, so they all would pass with or without http/www part in them as long as there is TLD present like .com, .net, .org etc..

Valid URLs Should Be:

http://www.domain.com
http://domain.com
https://www.domain.com
https://domain.com
www.domain.com
domain.com

To support long tlds:

http://www.domain.com.uk
http://domain.com.uk
https://www.domain.com.uk
https://domain.com.uk
www.domain.com.uk
domain.com.uk

To support dashes (-):

http://www.domain-here.com
http://domain-here.com
https://www.domain-here.com
https://domain-here.com
www.domain-here.com
domain-here.com

Also to support numbers in domains:

http://www.domain1-test-here.com
http://domain1-test-here.com
https://www.domain1-test-here.com
https://domain1-test-here.com
www.domain1-test-here.com
domain-here.com

Also maybe allow even IPs:

127.127.127.127

(but this is extra!)

Also allow dashes (-), forgot to mantion that =)

I've found many functions that validate one or another but not both at same time. If any one knows good regex for it, please share. Thank you for your help.

4

4 に答える 4

6

URL検証の完璧なソリューション。

上記の回答は正しいですが、.me、.it、.in などのすべてのドメインでは機能しません。

したがって、URL の一致については以下を使用してください。

$pattern = '/(?:https?:\/\/)?(?:[a-zA-Z0-9.-]+?\.(?:[a-zA-Z])|\d+\.\d+\.\d+\.\d+)/';

if(preg_match($pattern, "http://website.in"))
{
echo "valid";
}else{
echo "invalid";
}
于 2015-02-26T05:28:25.690 に答える
1

パス部分を無視してドメイン部分だけを探す場合、単純なルールは次のようになります。

(?:https?://)?(?:[a-zA-Z0-9.-]+?\.(?:com|net|org|gov|edu|mil)|\d+\.\d+\.\d+\.\d+)

国の TLD もサポートする場合は、完全な (最新の) リストを提供するか|..、TLD 部分に追加する必要があります。

いくつpreg_matchかの区切り文字の間にラップする必要があります

$pattern = ';(?:https?://)?(?:[a-zA-Z0-9.-]+?\.(?:com|net|org|gov|edu|mil)|\d+\.\d+\.\d+\.\d+);';
$index = preg_match($pattern, $url);

通常は、 を使用します/。ただし、この場合、スラッシュはパターンの一部であるため、別の区切り文字を選択しました。それ以外の場合は、スラッシュをエスケープする必要があります\

$pattern = '/(?:https?:\/\/)?(?:[a-zA-Z0-9.-]+?\.(?:com|net|org|gov|edu|mil)|\d+\.\d+\.\d+\.\d+)/';
于 2012-12-18T06:09:10.203 に答える
1

のフラグを使用できると思いますfilter_vars

FILTER_VALIDATE_URL使用可能なフラグがいくつかあります。

  • FILTER_FLAG_SCHEME_REQUIREDURL にスキーム部分が含まれている必要があります。
  • FILTER_FLAG_HOST_REQUIREDURL にホスト部分を含める必要があります。
  • FILTER_FLAG_PATH_REQUIREDURL にパス部分を含める必要があります。
  • FILTER_FLAG_QUERY_REQUIREDURL にクエリ文字列を含める必要があります。

FILTER_FLAG_SCHEME_REQUIREDデフォルトでFILTER_FLAG_HOST_REQUIRED使用されます。

パス部分をチェックしたいが、スキーム部分をチェックしたくない場合、次のようなことができます (falg はビットマスクです):

filter_var($url, FILTER_VALIDATE_URL, ~FILTER_FLAG_SCHEME_REQUIRED | FILTER_FLAG_PATH_REQUIRED)
于 2016-09-13T09:35:33.733 に答える
0

正規表現を使用しないでください。文字列に関係するすべての問題で正規表現を使用する必要があるわけではありません。

独自の URL バリデータを作成しないでください。URL 検証は解決済みの問題であり、既に記述、デバッグ、およびテストされた既存のコードがあります。実際、これは PHP に標準で付属しています。

PHP の組み込みフィルタリング機能を見てください: http://us2.php.net/manual/en/book.filter.php

于 2012-12-18T14:43:19.860 に答える