2014-12-31 2 views
1

У меня есть требование для проверки формата часового пояса. Я получаю часовой пояс в строчном формате, например, следующим образом.Регулярное выражение для правильной проверки часового пояса строки

Должно быть так. Мне нужно, чтобы бросить ошибку, если что-то идет как +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> 

Не могли бы вы помочь мне решить эту проблему, я не имею много опыта в использовании регулярных выражений, чтобы показать, что я пытался. Спасибо

ответ

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 

Edit: упс! забыли проверить, проверено ли оно на 1 или 2 числа для целочисленного значения.

+0

Спасибо за помощь. – Dibish

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)»), так это то, что вы хотите, чтобы соответствовать с регулярное выражение.