Perl中24小时格式的正则表达式

时间:2014-04-22 08:24:07

标签: regex perl

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

my $var = "2340";

正确格式

my $var ="23:40";

我试过这个但不适合我:

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

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

3 个答案:

答案 0 :(得分:3)

似乎你已经感染了一例regexitis,这是因为当一个程序员发现正则表达的力量时,会试图将它们用于所有,甚至是他们非常尴尬的情况使用别的东西会更有意义。

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

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!";
}

答案 1 :(得分:2)

你的正则表达式似乎是为12小时制而非24小时制,你可以尝试以下方式:

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

答案 2 :(得分:0)

为什么这么复杂?只需/^\d\d:\d\d$/就可以检查2位数

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