有人可以告诉我如何验证像http://www.abc.com
这样的网址答案 0 :(得分:36)
让System.Uri为您做繁重的工作,而不是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 ));
}
}
答案 1 :(得分:15)
现在(至少构成ASP.NET MVC 5)您可以使用UrlAttribute,其中包括服务器和客户端验证:
[Url]
public string WebSiteUrl { get; set; }
答案 2 :(得分:11)
如果您使用的是MVC3 RTM,则可以使用[URL]验证属性。
答案 3 :(得分:6)
如果您希望使用MVC DataAnnotations验证网址字符串,您可以通过帖子的标题编写自定义验证器:
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;
}
}
菲尔·哈克有一个很好的教程,超越了这一点,还包括通过jQuery在客户端添加验证代码: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx
答案 4 :(得分:3)
如何使用 URL 属性,例如:
public class ProveedorMetadata
{
[Url()]
[Display(Name = "Web Site")]
public string SitioWeb { get; set; }
}
答案 5 :(得分:0)
使用正则表达式数据注释,并使用如下的正则表达式:
http://www\.\w+\.(com|net|edu|org)
取决于您需要验证的内容;你需要http:或者你需要www。?这样可以将正则表达式(如果可选)更改为:
(http://)?(www\.)?\w+\.(com|net|edu|org)
答案 6 :(得分:0)
我在我的网站上使用此正则表达式作为内部或外部URL。
((?:https?\:\/\/|\/.)(?:[-a-z0-9]+\.)*[-a-z0-9]+.*)
答案 7 :(得分:0)
以下是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;
}
}
答案 8 :(得分:-1)
Uri.IsWellFormedUriString检查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);
}
}