【解決方法】エントリがC#でこのような場合にURLが有効か無効かを検証する方法


エントリが次のような場合に URL が有効か無効かを検証する方法:

www.com – 無効である必要があります
http://ww.try.net – 無効である必要があります
http://winner.com – 有効である必要があります
url = null = 無効にする必要があります

以下は、上記のシナリオを検証しない私が作成した方法です。

よろしくお願いいたします。

私が試したこと:

C#

<pre> public bool IsUrlValid(string webUrl)
        {
            if (webUrl == null) return false;
            return Regex.IsMatch(webUrl, @"(http|https)://(([www\.])?|([\da-z-\.]+))\.([a-z\.]{2,3})$");
        }

解決策 1

正規表現パターンに関係なく、組み込み関数があります。 Uri.IsWellFormedUriString メソッド (文字列、UriKind) (システム)[^]

例:

C#
List<string> uris = new List<string>(){"www.com", "http://ww.try.net", "http://winner.com", "url = null"};

var result = uris.Select(x=> new {Uri = x, IsValid = Uri.IsWellFormedUriString(x, UriKind.Absolute)});

foreach(var u in result)
{
	Console.WriteLine("'{0}' is{1}valid", u.Uri, u.IsValid ? " ":" NOT ");
}

結果:

'www.com' is NOT valid
'http://ww.try.net' is valid
'http://winner.com' is valid
'url = null' is NOT valid

代わりに正規表現を使用したい場合は、これを使用できます。 ^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$

解決策 2

‘http://ww.try.net’ 自体は有効な URL です。
「www」は、この場所で使用される最も一般的な値にすぎませんが、値なしを含め、任意の値が許可されます。

解決策 3

これを試して:-

文字列パターン = @”/\b(http|https)\:\/\/(www\.)?[a-z]+\.[a-z]{2,3}\b/g”;
// 正規表現オブジェクトをインスタンス化します。
正規表現 r = new Regex(pattern , RegexOptions.IgnoreCase);

// 正規表現パターンをテキスト文字列と照合します。
var m = r.Match(webUrl);

コメント

タイトルとURLをコピーしました