有效字符串时区检查的正则表达式

时间:2014-12-31 04:59:46

标签: javascript regex

我要求验证时区格式。我正在以字符串格式获取时区,如下所示。

应该是这样的。如果其他任何事情像+05:30

那么我需要抛出一个错误

有效的时区格式

 0, 1, 2, 3.5, 5.75 .. 12 
-1, -2, -4.5, -11 ... -12

时区格式示例

<option value="-12">(GMT -12:00)</option>
<option value="-11">(GMT -11:00) </option>
<option value="-10">(GMT -10:00)</option>
<option value="-9">(GMT -9:00) Alaska</option>
<option value="-8">(GMT -8:00)</option>
<option value="-7">(GMT -7:00)</option>
<option value="-6">(GMT -6:00)</option>
<option value="-5">(GMT -5:00)</option>
<option value="-4.5">(GMT -4:30)</option>
<option value="-4">(GMT -4:00)</option>
<option value="-3.5">(GMT -3:30) </option>
<option value="-3">(GMT -3:00)</option>
<option value="-2">(GMT -2:00)</option>
<option value="-1">(GMT -1:00 hour)</option>
<option value="0">(GMT)</option>
<option value="1">(GMT +1:00 hour)</option>
<option value="2">(GMT +2:00)</option>
<option value="3">(GMT +3:00)</option>
<option value="3.5">(GMT +3:30)</option>
<option value="4">(GMT +4:00)</option>
<option value="4.5">(GMT +4:30)</option>
<option value="5">(GMT +5:00) </option>
<option value="5.5">(GMT +5:30) </option>
<option value="5.75">(GMT +5:45)</option>
<option value="6">(GMT +6:00)</option>
<option value="6.5">(GMT +6:30)</option>
<option value="7">(GMT +7:00) </option>
<option value="8">(GMT +8:00) </option>
<option value="9">(GMT +9:00) </option>
<option value="9.5">(GMT +9:30) </option>
<option value="10">(GMT +10:00) </option>
<option value="11">(GMT +11:00) </option>
<option value="12">(GMT +12:00)</option>

你能帮助我解决这个问题,我没有太多的专业知识来使用正则表达式来展示我曾经尝试过的东西。感谢

4 个答案:

答案 0 :(得分:1)

^-?\d{1,2}(?:\.\d{1,2})?$

这应该为你做。参见演示。

https://regex101.com/r/rU8yP6/8

^(?:-?(?:1[01]|[0-9])(?:\.\d{1,2})?|12)$

https://regex101.com/r/rU8yP6/10

答案 1 :(得分:1)

这是一种方式。请注意,它针对.5和.75进行测试,但无法区分6.5和7.5之间的差异。这两个数字都会通过,但只有一个是有效的时区。然而,这将至少针对正确的格式进行测试。

/^-?\d{1,2}(\.5|\.75)?$/

以下是一些测试:

/^-?\d{1,2}(\.5|\.75)?$/.test("5.5"); // returns true
/^-?\d{1,2}(\.5|\.75)?$/.test("5.7"); // returns false
/^-?\d{1,2}(\.5|\.75)?$/.test("-3.75"); // returns true
/^-?\d{1,2}(\.5|\.75)?$/.test("+05:30"); // returns false

编辑:哎呀!忘了确保为整数值测试了1或2个数字。

答案 2 :(得分:0)

valid_timezones = [0, 1, 2, 3.5, 5.75] # Use your array here
regexp = Regexp.new "\\A(#{valid_timezones.join('|')})\\z"
# => /\A(0|1|2|3.5|5.75)\z/ 

我假设提交了数值(例如“5.75”)而不是时区字符串(例如“(GMT +5:45)”),这就是你想要与正则表达式匹配的内容。

答案 3 :(得分:0)

此正则表达式接受所有格式: + 12,-12和12

/^[-\+]?(?:(?:1[012]|[0-9])(?:\.\d{1,2})?)$/

https://regex101.com/r/tM8sW0/3