2013-05-14 2 views
2

У меня есть строка, поле в моем Code First, который может содержать один из двух регулярных выражений:Multiple Regex данных аннотаций Проверка

([0-5]\d):([0-5]\d)\,(\d{2}) 
or 
(\d{3}),(\d{2}) 

Как я могу объединить их в одно поле? Я попытался использовать пользовательскую проверку. Проверка правильности поля всегда верна, даже если я ввожу только буквы. Я не могу понять, что я делаю неправильно.

[CustomResult] 
public string Resultstring { get; set; } 

и

public class CustomResultAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     if (value == null) 
     { 
      return false; 
     } 

     // 00:00,00 
     if (Regex.IsMatch(value.ToString(), @"([0-5]\d):([0-5]\d)\,(\d{2})")) 
     { 
      return true; 
     } 

     // 000,00 
     if (Regex.IsMatch(value.ToString(), @"(\d{3}),(\d{2})")) 
     { 
      return true; 
     } 
     return false; 
    } 
} 

ответ

2

Я думаю, что в этом случае, вы можете просто использовать или | в своем регулярном выражении:

([0-5]\d):([0-5]\d)\,(\d{2})|(\d{3}),(\d{2}) 

Поместите это в http://www.regexper.com/ видеть.

+0

Ничего себе, не могу поверить, что я просмотрел это. Большое спасибо! Это сработало. –

3
using System.ComponentModel.DataAnnotations; 

[RegularExpression("^([0-5]\d:[0-5]\d,\d{2})|(\d{3},\d{2})$"] 
+0

@ Ашрат Я не согласен. В данном примере кода OP он уже использует аннотации данных; этот пост разъясняет, как использовать стандартную аннотацию данных, данную для проверки на регулярные выражения. – Brinky

Смежные вопросы