2016-03-15 130 views
0

通過正則表達式目錄 的我用asp.net的MVC 5.工作,我有一個 List<string>這樣的: 驗證模型註釋

var animals = new List<string> 
{ 
    "Dog", 
    "Cat" 
}; 

animals只能包含2個值:DogCat。所以,如果值爲TigerLion,那麼這是無效的。

這裏是我用來驗證的基本途徑:

var regex = new Regex(@"Dog|Cat"); 
foreach (string animal in animals) 
{ 
    if (!regex.IsMatch(animal)) 
    { 
     // throw error message here... 
    } 
} 

現在,我要聲明的模型Animal存儲列表:

class Animal 
{ 
    //[RegularExpression(@"Dog|Cat", ErrorMessage = "Invalid animal")] 
    public List<string> Animals { get; set; } 
} 

在一些行動:

public ActionResult Add(Animal model) 
{ 
    if (ModelState.IsValid) 
    { 
     // do stuff... 
    } 
    // throw error message... 
} 

所以,我的問題是:如何使用正則表達式來驗證這一點List<string>值 案件?

回答

2

你可以寫自己的屬性:

public class ListIsValid : ValidationAttribute 
{ 
    public override bool IsValid(List animals) 
    { 
     var regex = new Regex(@"Dog|Cat"); 
     foreach (string animal in animals) 
     { 
      if (!regex.IsMatch(animal)) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
} 

在你Animal你的類,然後使用它是這樣的:

[ListIsValid(ErrorMessage = "There is some wrong animal in the list")] 
public List<string> Animals { get; set; } 
+0

非常感謝!這是幫助:) –

1

定義自定義驗證屬性並在那裏實現您的自定義邏輯。

public class OnlyDogsAndCatsAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    => (value as IList<string>).All(s => s == "Dog" || s == "Cat"); 
} 

public class Animal 
{ 
    [OnlyDogsAndCatsAttribute] 
    public List<string> Animals { get; set; } 
} 

通知沒有必要使用正則表達式

+0

謝謝。我會現在試試:) –