2010-06-17 45 views

回答

5

如果,你的文章的標題,你想用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; 
    } 
} 

菲爾哈克有一個很好的教程超越這一點,還包括添加代碼來驗證對通過jQuery客戶端: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

0

使用正則表達式數據註解的URL,並使用正則表達式,如:

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

根據什麼你需要驗證;你是否需要http:或者你是否需要www。?所以這個是可以改變的正則表達式,如果可選,到:

(http://)?(www\.)?\w+\.(com|net|edu|org) 
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)); 
    } 
} 
0

我使用的內部或外部URL這個正則表達式在我的網站。

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

這裏是督促系統中使用適當的驗證屬性碼:

[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

現在(至少形成ASP.NET MVC 5),可以使用UrlAttribute這包括服務器端和客戶端驗證:

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

當前正確答案 – 2016-09-18 14:51:21

+0

localhost存在問題,因爲它沒有有第一級域名 – ASpirin 2017-08-14 14:45:34

0

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