如何编写包含格式如00:00的正则表达式
00 之前:必须是 0-24 之间的数字和00 之后:必须是 0-59 之间的数字
我在下面有我的代码,但不知何故它无法正常工作。
[RegularExpression(@"[0-24]+:[0-59]", ErrorMessage = "Format was invalid")]
例如
00:59 被接受
25:60 不被接受
如何编写包含格式如00:00的正则表达式
00 之前:必须是 0-24 之间的数字和00 之后:必须是 0-59 之间的数字
我在下面有我的代码,但不知何故它无法正常工作。
[RegularExpression(@"[0-24]+:[0-59]", ErrorMessage = "Format was invalid")]
例如
00:59 被接受
25:60 不被接受
像这样简单的事情呢?
[RegularExpression(@"(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])", ErrorMessage = "Format was invalid")]
它匹配从00:00
到的任何时间23:59
。请注意,它不需要书面的前导零,因此也将接受像7:00
或7:3
七点后三分钟的时间(这与您提出问题的方式一致)。
如果您希望它需要前导零,只需删除问号...
试试这个"([0-9]{1,2}|100):(1?[0-9]{1,2}|200)"
试试这个:\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
为什么你需要解决每一个问题。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