Regex 用于检查指定数字之间的数字的数据注释正则表达式

Regex 用于检查指定数字之间的数字的数据注释正则表达式,regex,asp.net-mvc-3,Regex,Asp.net Mvc 3,如何编写包含00:00等格式的正则表达式 在:之前的00必须是介于0-24之间的数字,在:之后的00必须是介于0-59之间的数字 我下面有我的代码,但不知为什么有些代码不能正常工作 [RegularExpression(@"[0-24]+:[0-59]", ErrorMessage = "Format was invalid")] 为埃克斯梅普 00:59被接受 25:60不被接受试试这个“([0-9]{1,2}}100:(1?[0-9]{1,2}200)”试试这个”([0-9]{1,2}10

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

在:
之前的00必须是介于0-24之间的数字,在:之后的00必须是介于0-59之间的数字

我下面有我的代码,但不知为什么有些代码不能正常工作

[RegularExpression(@"[0-24]+:[0-59]", ErrorMessage = "Format was invalid")]
为埃克斯梅普

00:59被接受

25:60不被接受

试试这个
“([0-9]{1,2}}100:(1?[0-9]{1,2}200)”
试试这个
”([0-9]{1,2}100:(1?[0-9]{1,2}200),
试试这个:
\b:2[0-4](

带前导零:
\b(?:2[0-4]| 1\d | 0?\d):(?:5\d |[1-4]\d |[0?\d)\b
试试这个:
\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];
        }
    }

为什么你需要用
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];
        }
    }

像这样简单的事情怎么样

[RegularExpression(@"(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])", ErrorMessage = "Format was invalid")]
它在从
00:00
23:59
的任何时间匹配。请注意,它不需要前导零,因此也将接受七点过三分钟的时间,如
7:00
7:3
(这与您提问的方式一致)


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

像这样简单的东西怎么样

[RegularExpression(@"(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])", ErrorMessage = "Format was invalid")]
它在从
00:00
23:59
的任何时间匹配。请注意,它不需要前导零,因此也将接受七点过三分钟的时间,如
7:00
7:3
(这与您提问的方式一致)



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

放置一些要接受的示例值和要拒绝的示例值,这将更有意义…请阅读并尝试,它肯定会帮你+1个好问题..但是你需要了解这样一个事实:时不时地使用
REGEX
并不
。有时候做
是件愚蠢的事!我想问题已经完全改变了,因为正确答案不是当前问题的答案,而我的答案是。可惜我们不能都被标记为正确的!:-)把一些样本值放在接受和拒绝的位置,会更有意义…阅读并尝试一下,它肯定会帮你+1个好问题。但是你需要了解这样一个事实:时不时地使用
REGEX
并不
。有时这是
愚蠢的事情!我想问题已经完全改变了,因为正确答案不是当前问题的答案,而我的答案是。可惜我们不能都被标记为正确的!:-)我试过了,但不幸的是它对我不起作用。我输入的任何信息似乎都是错误的,我已经尝试过了,但不幸的是,它不能为我工作。我输入的任何内容似乎都不正确,谢谢!!它似乎可以为我正常工作。你能帮我重新编辑上面的例子吗?只是想了解更多。再次感谢!谢谢它似乎可以为我正常工作。你能帮我重新编辑上面的例子吗?只是想了解更多。再次感谢!它工作得非常好!谢谢@麻烦这个正则表达式不正确!它甚至与344:523300:200匹配。请查看我的解决方案below@Anirudha:不,没有!我的正则表达式是正确的。使用在线工具尝试一下。e、 g.它与344:253、300:200不匹配。你为什么投我的票@Anirudha:那是因为它搜索了整个字符串以查找匹配项,并在较长的字符串中找到了
00:30
。正则表达式就是这样工作的。它作为MVC验证正常工作,因为这要求整个字符串都是匹配的@我的错…你能编辑一下吗?这样我就可以投票了!它工作得非常好!谢谢@麻烦这个正则表达式不正确!它甚至与344:523300:200匹配。请查看我的解决方案below@Anirudha:不,没有!我的正则表达式是正确的。使用在线工具尝试一下。e、 g.它与344:253、300:200不匹配。你为什么投我的票@Anirudha:那是因为它搜索了整个字符串以查找匹配项,并在较长的字符串中找到了
00:30
。正则表达式就是这样工作的。它作为MVC验证正常工作,因为这要求整个字符串都是匹配的@我的错…你能编辑一下吗?这样我就可以投票了!