我有一个标量变量,我有一些字符串值。现在我想写一个模式匹配,检查值是否是正确的格式。
my $var = "2340";
正确格式
my $var ="23:40";
我试过这个但不适合我:
/^(0?[1-9]|1[012])(:[0-5]\d
时间可以是格式00:00(格式将是之前的2位数字:以及之后的2位数字)
答案 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指出的那样,应该使用常规代码进行更多的验证。