2

如何编写包含格式如00:00的正则表达式

00 之前:必须是 0-24 之间的数字和00 之后:必须是 0-59 之间的数字

我在下面有我的代码,但不知何故它无法正常工作。

[RegularExpression(@"[0-24]+:[0-59]", ErrorMessage = "Format was invalid")]

例如

00:59 被接受

25:60 不被接受

4

4 回答 4

2

像这样简单的事情呢?

[RegularExpression(@"(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])", ErrorMessage = "Format was invalid")]

它匹配从00:00到的任何时间23:59。请注意,它不需要书面的前导零,因此也将接受像7:007:3七点后三分钟的时间(这与您提出问题的方式一致)。

如果您希望它需要前导零,只需删除问号...

于 2012-08-15T07:12:35.897 回答
1

试试这个"([0-9]{1,2}|100):(1?[0-9]{1,2}|200)"

于 2012-08-15T06:48:33.503 回答
1

试试这个:\b(?:2[0-4]|1?\d):(?:5\d|[1-4]?\d)\b

前导零:
\b(?:2[0-4]|1\d|0?\d):(?:5\d|[1-4]\d|0?\d)\b

于 2012-08-15T06:54:06.490 回答
0

为什么你需要解决每一个问题。REGEX你不应该把事情复杂化。分解代码。这将使你的代码更具可读性和流畅性。

下面的方法产生了完美的匹配。

 public IEnumerable<string> getValues(string s)//this method returns the valid matches from s
    {
        Regex r=new Regex(@"\d{1,}:\d{1,}");
        foreach(Match m in r.Matches(s))
        {
        string[] str=m.Value.Split(':');

        if((int.Parse(str[0])>=0 && int.Parse(str[0])<=24) && (int.Parse(str[1])>=0&&int.Parse(str[1])<=59))
        yield return str[0]+":"+str[1];
        }
    }

通过使用 for-each 语句来使用上述方法!

foreach(string s in getValues("5:16 100:200"))//getValues method yields the perfect match
Console.WriteLine(s);//5:16
于 2012-08-15T07:10:31.537 回答