2015-10-08 4 views
-3

Я полный новичок в reg ex и мне было поручено обновить наши валидаторы регулярных выражений. В настоящее время они проверяют, что lat и longs реальны, но теперь нам нужно убедиться, что они находятся в определенном окне. Поскольку пользователь может ввести его или выбрать из карты, мы получим их в разных стилях (минуты/градусы, а также десятичные числа), которые нам нужно учитывать.Regex Validating Lat & long

Желаемая validation--

LAT 50 через 72 & LONG: -130 -180 через ИЛИ 172 через 180)

Текущий RegEx--

LAT: 
"^(-?((90((\.0{1,15})|(\:00\:00))?)|(([0-8]?\d)((\.\d{1,15})|((\:[0-5]\d){2}))?)))$" 

LONG: "^(-?((180((\.0{1,15})|(\:00\:00))?)|(((\d{1,2})|(1[0-7]\d))((\.\d{1,15})|((\:[0-5]\d){2}))?)))$" 

я сделал попробуйте Google, и он играл с этим

^[+]?([1-8]?\d(\.\d+)?|50(\.0+)?),\s*[+]?(72(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$ 

но у меня возникают проблемы, даже не читая его, так что я не могу сказать, как обновить его:

Типичные входы: Широта может быть либо 52,5 ИЛИ 52:30:00

+5

Это * не очень хороший подход. Просто используйте стандартные числовые регулярные выражения, а затем проанализируйте захваченные строки как числа и проверьте, находятся ли они в допустимом диапазоне.Использование регулярного выражения для этого излишне сложно. –

+0

Можете ли вы показать нам ввод? –

+0

Возможно, возникли проблемы ... – user3791372

ответ

0

Если регулярное выражение должно было быть использовано (как mentioned in your comment above), я бы, вероятно, пойти с чем-то вроде этого для «лат» с диапазоном 50 через 72:

^(?:(?:[56]\d|7[01])(?:\.\d{1,15}|(?::(?:[0-5]\d|\d)){1,2})?|72(?:\.0{1,15}|(?::00){1,2})?)$ 

Regular expression visualization

Debuggex Demo

Примечание Я предполагаю, что здесь, что ваш пример 52:30:00 означает, что два компонента число после двоеточия должны быть в 0 в 59 диапазоне.

Я оставлю «длинный» ввод проверки до вас ... но я хотел бы подчеркнуть, что ваша попытка имеет некоторые проблемы:

^[+]?([1-8]?\d(\.\d+)?|50(\.0+)?),\s*[+]?(72(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$ 
  • он включает в себя + символ - это не было упомянуто в ваших примерах ввода
  • включает в себя , и пробел \s* обнаружение - почему это здесь - снова ваши примеры ввода не позволяют пользователю вводить запятую или пробел.

Фокус на написание регулярных выражений для одного диапазона в то время, -130 through -180 первыми затем 172 through 180, а затем объединить два отдельных регулярные выражения с |.

Вы также не указали, на каком языке ваше регулярное выражение было - я предполагал, что JavaScript - но вы должны быть осторожны, если это не так - и более ясны в будущих вопросах.

Надеюсь, это поможет.

+0

Благодарим за помощь. Я попытался использовать генератор для создания этого и, не зная, что регулярное выражение не знает, искал ли [+] фактический + или просто сказал, что это положительное число. То же оправдание, и \ s *. Я ценю вашу помощь, особенно в объяснении, почему мое решение не сработало, потому что теперь я чувствую себя немного более подходящим для работы над долгой проверкой! – CluelessInAK

+0

Я также скажу, что вы должны думать о своем вводе как о последовательности символов, а не о положительном или отрицательном числе. –