Asp.net mvc asp.net mvc数据批注验证url

Asp.net mvc asp.net mvc数据批注验证url,asp.net-mvc,Asp.net Mvc,有人能告诉我如何验证url(如使用正则表达式数据注释)和正则表达式(如: http://www\.\w+\.(com|net|edu|org) 根据您需要验证的内容;您需要http:还是需要www。?这样可以将正则表达式(如果可选)更改为: (http://)?(www\.)?\w+\.(com|net|edu|org) 如果根据文章的标题,希望使用MVC DataAnnotations验证url字符串,则可以编写自定义验证程序: public class UrlAttribute : Va

有人能告诉我如何验证url(如使用正则表达式数据注释)和正则表达式(如:

http://www\.\w+\.(com|net|edu|org)
根据您需要验证的内容;您需要http:还是需要www。?这样可以将正则表达式(如果可选)更改为:

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

如果根据文章的标题,希望使用MVC DataAnnotations验证url字符串,则可以编写自定义验证程序:

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有一个很好的教程,它超越了这一点,还包括添加代码以通过jQuery在客户端进行验证:

让System.Uri代替正则表达式为您完成繁重的工作:

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 ));
    }
}

如果您使用的是MVC3 RTM,那么只需使用[URL]验证属性即可


请参阅

我将此正则表达式用于网站上的内部或外部URL

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

以下是prod系统中使用的正确验证属性代码:

[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;
    }
}
现在(至少在ASP.NET MVC 5中)可以使用URLDATTRIBUTE,其中包括服务器和客户端验证:

[Url]
public string WebSiteUrl { get; set; }
检查URL格式是否正确,并且不需要转义

/// <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);
    }
}
//
///确保属性是有效的URL。
/// 
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter,AllowMultiple=false)]
公共类ValidateUrLatAttribute:ValidationAttribute
{
公共验证EurlatAttribute()
{
}
公共覆盖布尔值有效(对象值)
{
//不要验证丢失的URL-人们可以使用[Required]进行验证。
字符串文本=(值为字符串)??“”;
如果(文本==“”)
返回true;
返回Uri.IsWellFormedUriString(text,UriKind.Absolute);
}
}

使用URL属性怎么样,比如:

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

“验证”是什么意思,验证什么?作为有效的URL?作为一个真正的、可访问的网站?验证颜色?我已经定义了模式+1,非常感谢有助于链接到这篇好文章的链接。,:)localhost有一个问题,因为它没有一级域名,我也这么认为。这仅适用于HTTP、HTTPS和FTP。如果您需要其他URL,如mailto或file!-你完蛋了,这对微软来说很正常。