Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于持续时间(HH:MM)和拆分的正则表达式?(或内置C#分离器)?_C#_Regex_Validation_Split - Fatal编程技术网

用于持续时间(HH:MM)和拆分的正则表达式?(或内置C#分离器)?

用于持续时间(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+。但这仍然匹配范围之外的数字。处理这些数字的最佳方

我正在尝试按照以下格式解析字符串: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+
。但这仍然匹配范围之外的数字。处理这些数字的最佳方式是什么

我正在以C#中的字符串形式进行此验证,如果有更好的方法验证此格式(并将其拆分为小时和分钟,请让我知道!)

基本上,我接受输入为HH:MM,对其进行验证、拆分,然后将其转换为
int
分钟数

例如:

  • 用户输入10:20
  • 检查格式验证
    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");
    }
    
    哪个输出

    743
    144
    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");
    }
    
    哪个输出

    743
    144
    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问题的方法。。。哦,好吧!