时区验证正则表达式

问题描述 投票:1回答:2

我正在尝试验证时区。示例:

UTC-12
UTC-6:30

所以-UTC将保持不变,符号将交替显示(+或-且数字从-12到+14不等。

我不明白为什么这个正则表达式不起作用(我无效):

$val = 'UTC+12';
$range = '-11:30|-11|-10:30|-10|-9:30|-9|-8:30|-8|-7:30|-7|-6:30|-6|-5:30|-5|-4:30|-4|-3:30|-3|-2:30|-2|-1:30|-1|-0:30|\+0|\+0:30|\+1|\+1:30|\+2|\+2:30|\+3|\+3:30|\+4|\+4:30|\+5|\+5:30|\+5:45|\+6|\+6:30|\+7|\+7:30|\+8|\+8:30|\+8:45|\+9|\+9:30|\+10|\+10:30|\+11|\+11:30|\+12|\+12:45|\+13|\+13:45|\+14';

$regex = '/^UTC(\+|-)(' . $range . ')/';

    if(preg_match($regex, $val)){
        echo 'valid';
    }else{
        echo 'not valid';
    }
php regex pcre
2个回答
3
投票

您需要对正则表达式中的+符号进行转义,以免它们不是贪婪的重复。

例如,+8变为\+8。像这样的东西(php不是我的语言):

$val = 'UTC+12'; $range = '-12|-11:30|-11|-10:30|-10|-9:30|-9|-8:30|-8|-7:30|-7|-6:30|-6|-5:30|-5|-4:30|-4|-3:30|-3|-2:30|-2|-1:30|-1|-0:30|+0|+0:30|+1|+1:30|+2|+2:30|+3|+3:30|+4|+4:30|+5|+5:30|+5:45|+6|+6:30|+7|+7:30|+8|+8:30|+8:45|+9|+9:30|+10|+10:30|+11|+11:30|+12|+12:45|+13|+13:45|+14';

$range = str_replace ( '+' , '\+' , $range)

$regex = '/^UTC(' . $range . ')/';

    if(preg_match($regex, $val)){
        echo 'valid';
    }else{
        echo 'not valid';
    }

0
投票

(代表问题作者的解决方案将其移至答案空间)

这很简单。我忘记了我已经在$range数组中使用了符号。我什至不必在正则表达式中检查符号。

$regex = '/^UTC(' . $range . ')/';
© www.soinside.com 2019 - 2024. All rights reserved.