वहाँ Uri.IsWellFormedUriString
और Uri.TryCreate
तरीके हैं, लेकिन वे वापस लौटने लगते हैंtrue
फ़ाइल पथ आदि के हैं।
मैं कैसे जांचूं कि क्या एक स्ट्रिंग वैध है (जरूरी नहीं कि सक्रिय) HTTP URL इनपुट सत्यापन प्रयोजनों के लिए है?
वहाँ Uri.IsWellFormedUriString
और Uri.TryCreate
तरीके हैं, लेकिन वे वापस लौटने लगते हैंtrue
फ़ाइल पथ आदि के हैं।
मैं कैसे जांचूं कि क्या एक स्ट्रिंग वैध है (जरूरी नहीं कि सक्रिय) HTTP URL इनपुट सत्यापन प्रयोजनों के लिए है?
जवाबों:
HTTP URL को मान्य करने के लिए इसे आज़माएं ( uriName
क्या आप जिस URI का परीक्षण करना चाहते हैं):
Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult)
&& uriResult.Scheme == Uri.UriSchemeHttp;
या, यदि आप HTTP और HTTPS URL दोनों को मान्य के अनुसार स्वीकार करना चाहते हैं (J0e3gan की टिप्पणी के अनुसार):
Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult)
&& (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps;
यह तरीका http और https दोनों में ठीक काम करता है। बस एक लाइन :)
if (Uri.IsWellFormedUriString("https://www.google.com", UriKind.Absolute))
MSDN: IsWellFormedUriString
file://
या ldap://
यह समाधान योजना के खिलाफ एक चेक के साथ मिलकर किया जाना चाहिए -। उदाहरण के लिएif (uri.Scheme != Uri.UriSchemeHttp && uri.Scheme != Uri.UriSchemeHttps) ...
public static bool CheckURLValid(this string source)
{
Uri uriResult;
return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
}
उपयोग:
string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
//valid process
}
अद्यतन: (कोड की एक पंक्ति) धन्यवाद @GoClimbColorado
public static bool CheckURLValid(this string source) => Uri.TryCreate(source, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps;
उपयोग:
string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
//valid process
}
Uri.TryCreate(source, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps
यहाँ सभी जवाब या तो अनुमति देने के अन्य योजनाओं के साथ यूआरएल (जैसे, file://
, ftp://
) या मानव पठनीय यूआरएल है कि के साथ शुरू नहीं करना अस्वीकार http://
या https://
(जैसे, www.google.com
) जो अच्छा नहीं है जब उपयोगकर्ता इनपुट के साथ काम कर ।
यहां बताया गया है कि मैं इसे कैसे करता हूं:
public static bool ValidHttpURL(string s, out Uri resultURI)
{
if (!Regex.IsMatch(s, @"^https?:\/\/", RegexOptions.IgnoreCase))
s = "http://" + s;
if (Uri.TryCreate(s, UriKind.Absolute, out resultURI))
return (resultURI.Scheme == Uri.UriSchemeHttp ||
resultURI.Scheme == Uri.UriSchemeHttps);
return false;
}
उपयोग:
string[] inputs = new[] {
"https://www.google.com",
"http://www.google.com",
"www.google.com",
"google.com",
"javascript:alert('Hack me!')"
};
foreach (string s in inputs)
{
Uri uriResult;
bool result = ValidHttpURL(s, out uriResult);
Console.WriteLine(result + "\t" + uriResult?.AbsoluteUri);
}
आउटपुट:
True https://www.google.com/
True http://www.google.com/
True http://www.google.com/
True http://google.com/
False
http://mooooooooo
वास्तव में, एक वैध उड़ी है। इसलिए, आप Uri.IsWellFormedUriString
"http: //" डालने के बाद जांच नहीं कर सकते हैं और यदि आप इसके लिए पहले जांच करते हैं, तो ऐसी कोई भी चीज जिसे Scheme
अस्वीकार नहीं किया जाएगा। शायद जो किया जा सकता है, उसके s.Contains('.')
बदले हम जाँच करें ।
IsWellFormedUriString
जोड़ने से पहलेhttp://
करते हैं, google.com
तो आप चीजों को अस्वीकार कर देंगे जैसे और यदि आप इसे जोड़ने के बाद उपयोग करते हैं http://
, तो यह अभी भी सही होगा http://mooooooooo
। इसलिए मैंने सुझाव दिया है कि अगर स्ट्रिंग के .
बजाय इसकी जाँच हो ।
उसकी कोशिश करो:
bool IsValidURL(string URL)
{
string Pattern = @"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$";
Regex Rgx = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
return Rgx.IsMatch(URL);
}
यह URL को इस तरह स्वीकार करेगा:
यह बूल लौटेगा:
Uri.IsWellFormedUriString(a.GetAttribute("href"), UriKind.Absolute)
bool passed = Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps)