20

can some one tell me how can i validate a url like http://www.abc.com

2
  • 3
    What do you mean 'validate', validate for what? As a valid URL? As a real, accessible web site? Validate the colour? Commented Jun 17, 2010 at 12:23
  • I have define the pattern abc.com Commented Jun 18, 2010 at 10:21

10 Answers 10

40

Let the System.Uri do the heavy lifting for you, instead of a RegEx:

public class UrlAttribute : ValidationAttribute
{
    public UrlAttribute()
    {
    }

    public override bool IsValid(object value)
    {
        var text = value as string;
        Uri uri;

        return (!string.IsNullOrWhiteSpace(text) && Uri.TryCreate(text, UriKind.Absolute, out uri ));
    }
}
Sign up to request clarification or add additional context in comments.

Comments

29

Now (at least form ASP.NET MVC 5) you can use UrlAttribute and that includes server and client validation:

[Url]
public string WebSiteUrl { get; set; }

2 Comments

There is a problem with localhost, because it doesn't have 1st level domain
Note that if you want to also make sure it is not-null then you also need Required so it needs to be [Required,Url] to cover the not-null case as well.
10

If you are using MVC3 RTM, you can just use [URL] validation attribute.

Refer http://weblogs.asp.net/imranbaloch/archive/2011/02/05/new-validation-attributes-in-asp-net-mvc-3-future.aspx

1 Comment

+1 and Many thanks for the Helpful link to the nice article., :)
5

If, by the title of your post, you want to use MVC DataAnnotations to validate a url string, you can write a custom validator:

public class UrlAttribute : ValidationAttribute
{
    public UrlAttribute() { }

    public override bool IsValid(object value)
    {
        //may want more here for https, etc
        Regex regex = new Regex(@"(http://)?(www\.)?\w+\.(com|net|edu|org)");

        if (value == null) return false;

        if (!regex.IsMatch(value.ToString())) return false;

        return true;
    }
}

Phil Haack has a good tutorial that goes beyond this and also includes adding code to validate on the client side via jQuery: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Comments

5

What about using URL attribute, like:

public class ProveedorMetadata
{
    [Url()]
    [Display(Name = "Web Site")]
    public string SitioWeb { get; set; }
}

1 Comment

I thought so, too. That only works for HTTP, HTTPS, and FTP. If you want other URLs - like mailto or file! - you're screwed, which is normal for Microsoft.
2

Here is proper validation attribute code used in prod system:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class UriValidation : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null || value.ToString() == string.Empty)
        {
            return true;
        }

        try
        {
            Uri result;
            if (Uri.TryCreate(value.ToString(), UriKind.RelativeOrAbsolute, out result))
            {
                if (result.Scheme.StartsWith("http") || result.Scheme.StartsWith("https"))
                {
                    return true;
                }
            }
        }
        catch
        {
            return false;
        }

        return false;
    }
}

Comments

0

Use a regular expression data annotation, and use a regex like:

http://www\.\w+\.(com|net|edu|org)

Depending on what you need to validate; are you requiring http: or are you requiring www.? So that could change the regular expression, if optional, to:

(http://)?(www\.)?\w+\.(com|net|edu|org)

Comments

0

I use this regular expression for Internal or external URLS on my site.

((?:https?\:\/\/|\/.)(?:[-a-z0-9]+\.)*[-a-z0-9]+.*)

Comments

0

Since .NET Framework 4.5 all the way thru to .NET 7+, you can use the Url attribute on the model's property.

[Url]
public string MyUrl { get; set; }

https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.urlattribute?view=net-6.0

Comments

-1

Uri.IsWellFormedUriString checks that the URL format is correct and does not require escaping.

/// <summary>
/// Ensures the property is a valid URL.
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class ValidateUrlAttribute :  ValidationAttribute
{
    public ValidateUrlAttribute()
    {
    }

    public override bool IsValid(object value)
    {
        // Do not validate missing URLs - people can use [Required] for that.
        string text = (value as string) ?? "";

        if (text == "")
            return true;

        return Uri.IsWellFormedUriString(text, UriKind.Absolute);
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.