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:00または7:37時3分などの時間も受け入れることに注意してください(これは、質問の仕方と一致しています)。

先行ゼロを必要とする場合は、疑問符を削除してください...

于 2012-08-15T07:12:35.897 に答える
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 に答える
1

これを試して"([0-9]{1,2}|100):(1?[0-9]{1,2}|200)"

于 2012-08-15T06:48:33.503 に答える
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 に答える