用于持续时间(HH:MM)和拆分的正则表达式?(或内置C#分离器)?
我正在尝试按照以下格式解析字符串:HH:MM用于持续时间(HH:MM)和拆分的正则表达式?(或内置C#分离器)?,c#,regex,validation,split,C#,Regex,Validation,Split,我正在尝试按照以下格式解析字符串:HH:MM 12:23 //Normal 2:24 //No trailing 0 01:00 //With trailing 0 00:21 //00 First number 0:32 //0 First Number 10:4 //No 0 second number, denotes 10:04 第一个数字最大24,最小0 第二个数字最大59,最小0 我制作了字符串regex string\d+:\d+。但这仍然匹配范围之外的数字。处理这些数字的最佳方
12:23 //Normal
2:24 //No trailing 0
01:00 //With trailing 0
00:21 //00 First number
0:32 //0 First Number
10:4 //No 0 second number, denotes 10:04
第一个数字最大24,最小0
第二个数字最大59,最小0
我制作了字符串regex string\d+:\d+
。但这仍然匹配范围之外的数字。处理这些数字的最佳方式是什么
我正在以C#中的字符串形式进行此验证,如果有更好的方法验证此格式(并将其拆分为小时和分钟,请让我知道!)
基本上,我接受输入为HH:MM,对其进行验证、拆分,然后将其转换为int
分钟数
例如:
HH:MM
(0-24):(0-60)
int hrs=10
和int mins=20
return(分钟+(小时*60))代码>
您可以使用
TimeSpan.TryParse
。这还可以通过TotalMinutes
属性为您计算分钟数:
List<string> tests = new List<string>()
{
"12:23", //Normal
"2:24", //No trailing 0
"01:00", //With trailing 0
"00:21", //00 First number
"0:32", //0 First Number
"10:4", //No trailing 0 second number
};
foreach (var test in tests)
{
TimeSpan t;
if (TimeSpan.TryParse(test, out t))
Console.WriteLine(t.TotalMinutes);
else
Console.WriteLine("Not valid");
}
哪个输出
743144
60
21
32
604
失败
您可以使用
TimeSpan.TryParse
。这还可以通过TotalMinutes
属性为您计算分钟数:
List<string> tests = new List<string>()
{
"12:23", //Normal
"2:24", //No trailing 0
"01:00", //With trailing 0
"00:21", //00 First number
"0:32", //0 First Number
"10:4", //No trailing 0 second number
};
foreach (var test in tests)
{
TimeSpan t;
if (TimeSpan.TryParse(test, out t))
Console.WriteLine(t.TotalMinutes);
else
Console.WriteLine("Not valid");
}
哪个输出
743144
60
21
32
604
失败
(0?[0-9]| 1[0-9]| 2[0-4]):(0?[0-9]|[1-5][0-9])
?var isGood=TimeSpan.TryParseExact(testValue,@“h\:m”,null,out ts)
但是如果你真的遇到这种情况,这会失败24小时。请注意,你实际上想要支持所有这些:H:m
,HH:m
,H:mm
,以及HH:mm
。非正则表达式的方法是:var fmts=newlist(){“H:m”、“HH:m”、“H:m”、“HH:mm”}代码>Console.WriteLine(DateTime.ParseExact(“0:32”,fmts.ToArray(),CultureInfo.CurrentCulture,DateTimeStyles.None))代码>所有示例都可以通过TimeSpan.Parse
轻松解析:new[]{“12:23”、“2:24”、“01:00”、“00:21”、“0:32”、“10:4}。选择(TimeSpan.Parse)
(0?[0-9]| 1[0-9]| 2[0-4]):(0?[0-9]|[1-5][0-9])。
但是如果你真的遇到这种情况,这会失败24小时。请注意,你实际上想要支持所有这些:H:m
,HH:m
,H:mm
,以及HH:mm
。非正则表达式的方法是:var fmts=newlist(){“H:m”、“HH:m”、“H:m”、“HH:mm”}代码>Console.WriteLine(DateTime.ParseExact(“0:32”,fmts.ToArray(),CultureInfo.CurrentCulture,DateTimeStyles.None))代码>所有示例都可以通过TimeSpan.Parse
轻松解析:new[]{“12:23”、“2:24”、“01:00”、“00:21”、“0:32”、“10:4”}。选择(TimeSpan.Parse)
这还将传递一个由三部分组成的字符串“11:22:33”,该字符串刚刚为此准备了一个代码示例。答案正确。最后一个结果不是604错了吗?他说10:4应该有一个尾随的零表示它是10:40,而不是10:04。@Equalsk抱歉,我打错了-10:4应该表示10:04D'oh!我正要发布关于TimeSpan的帖子,正忙着寻找解决10:40问题的方法。。。哦,好吧!这还将传递一个由三部分组成的字符串“11:22:33”,该字符串刚刚为此准备了一个代码示例。答案正确。最后一个结果不是604错了吗?他说10:4应该有一个尾随的零表示它是10:40,而不是10:04。@Equalsk抱歉,我打错了-10:4应该表示10:04D'oh!我正要发布关于TimeSpan的帖子,正忙着寻找解决10:40问题的方法。。。哦,好吧!