如何编写包含 00:00
等格式的正则表达式 之前的 00:必须在0-24到 00之间为数字:必须在0-59之间为数字我的代码如下,但有些情况下它无法正常工作。
[RegularExpression(@"[0-24]+:[0-59]", ErrorMessage = "Format was invalid")]
对于Exmaple
00:59被接受
25:60未被接受
答案 0 :(得分:2)
这样简单的事情怎么样?
[RegularExpression(@"(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])", ErrorMessage = "Format was invalid")]
它可以在00:00
到23:59
的任何时间匹配。请注意,它不需要写入的前导零,因此在7点之前的三分钟也会接受7:00
或7:3
之类的时间(这与您提出问题的方式一致)。
如果您希望它需要前导零,只需删除问号...
答案 1 :(得分:1)
试试这个"([0-9]{1,2}|100):(1?[0-9]{1,2}|200)"
答案 2 :(得分: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
答案 3 :(得分: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