时区验证正则表达式


Timezones validation regex

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

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';
    }

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

,则+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';
    }

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

这太简单了。我忘了我已经在我的$range数组中使用了符号。我甚至不需要检查正则表达式中的符号

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