Текстовое поле формы Windows должно принимать только имя URL - PullRequest
3 голосов
/ 26 июня 2010

Привет! Мне нужно проверить, что текстовое поле должно принимать только имена URL. Кто-нибудь может сказать мне, пожалуйста. Я был бы очень благодарен.

Ответы [ 6 ]

1 голос
/ 26 июня 2010

Как насчет этого:

    public void Test()
    {
        Uri result = UrlIsValid("www.google.com");
        if (result == null)
        {
            //Invalid Url format
        }
        else
        {
            if (UrlExists(result))
            {
                //Url is valid and exists
            }
            else
            {
                //Url is valid but the site doesn't exist
            }
        }
        Console.ReadLine();
    }

    private static Uri UrlIsValid(string testUrl)
    {
        try
        {
            if (!(testUrl.StartsWith(@"http://") || testUrl.StartsWith(@"http://")))
            {
                testUrl = @"http://" + testUrl;
            }
            return new Uri(testUrl);
        }
        catch (UriFormatException)
        {
            return null;
        }   
    }

    private static bool UrlExists(Uri validUri)
    {
        try
        {   
            WebRequest.Create(validUri).GetResponse();
            return true;
        }

        catch (WebException)
        {
            return false;
        }
    }

Если вам нужно только проверить, что он в правильном формате, вы можете извлечь часть UrlExists.

1 голос
/ 26 июня 2010

Вам нужен правильный URL или просто правильный формат? Если это последнее, вам, вероятно, понадобится регулярное выражение, как указывают другие ответы, но заставить его работать для всех URL-адресов может быть сложно.

Если это первое, то просто попытайтесь разрешить URL. Есть несколько способов сделать это, у каждого есть недостатки. Например, если вы используете «ping», вам нужно будет удалить любой ведущий «http://" перед раздачей».

Однако этот метод не является надежным: а) у вас может не быть подключения к интернету и б) хост может быть недоступен.

1 голос
/ 26 июня 2010

Я не думаю, что есть встроенный метод или класс, который вы можете использовать для проверки строки в качестве допустимого URL. Но вы можете использовать регулярные выражения, что-то вроде ["^ a-zA-Z0-9 -._"] +. ([A-zA-Z] [a-zA-Z]) Если вы используете код из Ranhiru, вы не получите его правильно, например, с bild.de и s.int, которые являются действительными URL.

0 голосов
/ 25 мая 2015

это работает для меня

private bool ValidateURL (строка urlText) { результат bool;

    try
    {
        Uri check = new Uri(urlText);
        result = true;
    }
    catch (UriFormatException)
    {
        result = false;
    }

    return result;
}
0 голосов
/ 18 мая 2015

Намного проще:

    /// <summary>
    /// Validates that the URL text can be parsed.
    /// </summary>
    /// <remarks>
    /// Does not validate that it actually points to anything useful.
    /// </remarks>
    /// <param name="urlText">The URL text.</param>
    /// <returns></returns>
    private bool ValidateURL(string urlText)
    {
        bool result;

        try
        {
            Uri check = new Uri(urlText);
            result = true;
        }
        catch (UriFormatException)
        {
            result = false;
        }

        return result;
    }
0 голосов
/ 26 июня 2010

Вы можете использовать Регулярные выражения, чтобы проверить, является ли введенный текст действительным URL:)

using System.Text.RegularExpressions;

private bool validateURL()
        {

            Regex urlCheck = new Regex("^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");

            if (urlCheck.IsMatch(txtUrlAddress.Text))
                return true;
            else
            {
                MessageBox.Show("The url address you have entered is incorrect!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
                return false;

            }




        }

Вы можете использовать эту функцию как

   if (validateURL() == true)
          //Do something
    else
          //Do something else

Проверьте, есть ли другие регулярные выражения URLЗдесь http://www.regexlib.com/Search.aspx?k=url&c=-1&m=5&ps=20

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...