【问题标题】:Regular expression for 24-hour format in PerlPerl 中 24 小时格式的正则表达式
【发布时间】:2014-04-22 08:24:07
【问题描述】:

我有一个标量变量,我有一些字符串值。现在我想编写一个模式匹配来检查值的格式是否正确。

my $var = "2340";

正确的格式

my $var ="23:40";

我试过了,但不适合我:

/^(0?[1-9]|1[012])(:[0-5]\d

时间可以是 00:00 的格式(格式为 : 之前的 2 位数字和 : 之后的 2 位数字)

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    您似乎感染了正则表达式,即编码人员在发现正则表达式的强大功能后,尝试将它们用于一切,即使是在它们非常尴尬的情况下使用其他东西会更有意义。

    在你的情况下,现成的代码(未经测试,可能有一些语法错误):

    if($var =~ /(\d\d):(\d\d)/) {
        my $hour = $1; my $min = $2;
        if($hour > 23 || $min > 59) {
            print "Numbers out of range!";
        } else {
            #Yay, valid!
        }
    } else {
        print "Invalid date format!";
    }
    

    【讨论】:

    • 我们如何在 jquery 中做到这一点你有什么想法??
    • 正则表达式在 Javascript 中非常可用,有一个很好的概述 on MDN
    【解决方案2】:

    您的正则表达式似乎是为 12 小时制而不是 24 小时制构建的,您可以尝试以下方法:

    ^([01]\d|2[0-3])\:([0-5]\d)$
    

    【讨论】:

    • 20:30 怎么样?您没有正确匹配 20。
    【解决方案3】:

    为什么这么复杂? /^\d\d:\d\d$/ 应该可以检查 2 位数字

    您可以使其更复杂以便更好地检查,例如 [0-2][0-9]:[0-6][0-9] 来检查有效数字。正如 cincodenada 指出的那样,应该使用常规代码完成比这更多的验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多