多个正则表达式数据注释验证

时间:2013-05-14 08:46:18

标签: c# regex data-annotations

我的Code First中有一个字符串字段,它可以包含两个正则表达式之一:

([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 :(得分:3)

using System.ComponentModel.DataAnnotations;

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

答案 1 :(得分:2)

我认为在这种情况下,您可以在正则表达式中使用或|

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

将其放入http://www.regexper.com/以查看。