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
7時3分などの時間も受け入れることに注意してください(これは、質問の仕方と一致しています)。
先行ゼロを必要とする場合は、疑問符を削除してください...
これで試してください:\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
これを試して"([0-9]{1,2}|100):(1?[0-9]{1,2}|200)"
なぜすべての問題を次の方法で解決する必要がある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