2010-06-17 37 views
9

thể một số một cho tôi biết làm thế nào tôi có thể xác nhận một url như http://www.abc.comasp.net MVC dataannotation xác nhận url

+3

Ý của bạn là 'xác thực', xác thực cho những gì? Là một URL hợp lệ? Là trang web thực sự có thể truy cập? Xác nhận màu sắc? – Lazarus

+0

Tôi đã xác định mẫu http://www.abc.com – maztt

Trả lời

5

Nếu, bởi tiêu đề của bài viết của bạn, bạn muốn sử dụng DataAnnotations MVC để xác nhận một chuỗi url, bạn có thể viết một validator tùy chỉnh:

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 có một hướng dẫn tốt mà đi vượt ra ngoài này và cũng bao gồm thêm mã để xác nhận trên các mặt hàng qua jQuery: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

0

Sử dụng dữ liệu biểu hiện thường xuyên chú thích, và sử dụng một regex như:

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

Tùy thuộc vào những gì bạn cần xác nhận; bạn có yêu cầu http: hoặc bạn yêu cầu www.? Vì vậy, có thể thay đổi các biểu thức chính quy, nếu không bắt buộc, để:

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

Hãy để System.Uri làm các việc nâng nặng cho bạn, thay vì một 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

tôi sử dụng biểu thức chính quy này cho Internal hoặc URL bên ngoài trên trang web của tôi.

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

Dưới đây là thích hợp đang thuộc tính xác nhận sử dụng trong hệ thống sản:

[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

Bây giờ (ít nhất là hình ASP.NET MVC 5), bạn có thể sử dụng UrlAttribute và bao gồm máy chủ và khách hàng xác nhận:

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

Câu trả lời đúng hiện tại –

+0

Có vấn đề với localhost, bởi vì nó không có tên miền cấp 1 – ASpirin

0

Uri.IsWellFormedUriString kiểm tra định dạng URL là chính xác và không yêu cầu thoát.

/// <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); 
    } 
} 
Các vấn đề liên quan