Регулярное выражение Rails для проверки широты и долготы Карт Google - PullRequest
3 голосов
/ 06 июля 2010

Я пытаюсь сделать validates_format_of для объекта latlng, который передается обратно из Google Maps API. У меня карта настроена идеально, поэтому, когда я нажимаю на точку на карте, она заполняет текстовое поле с помощью latlng (который выглядит следующим образом: 46.320615137905904, 9.400520324707031) Я сохраняю это значение в виде строки в БД (которую затем разбираю, чтобы позже разместить маркеры на карте), но мне нужно проверить формат строки как два числа с плавающей запятой (положительное или отрицательное) с запятой между ними.

Я знаю, что это возможно с регулярным выражением, но за всю жизнь я не смог выяснить строку регулярного выражения, чтобы она заработала.

Любая помощь будет очень признательна! Спасибо! Джефф

Ответы [ 4 ]

9 голосов
/ 08 сентября 2012

Я проверяю таким образом:

var ck_lat = /^-?([1-8]?\d(?:\.\d{1,})?|90(?:\.0{1,6})?)$/;
var ck_lon = /^-?((?:1[0-7]|[1-9])?\d(?:\.\d{1,})?|180(?:\.0{1,})?)$/;
var lat = 89.320615;
var lon = 179.400520;

if(ck_lat.test(lat) && ck_lon.test(lon)) {
    //Was a valid latitude and longitude pair :)
}

Это на стадии разработки, но работает нормально, вот ссылка для тестирования обоих регулярных выражений:

Проверка широты: http://rubular.com/r/vodC5TW3lG

Проверка долготы: http://rubular.com/r/3LIIcjFEQT

РЕДАКТИРОВАТЬ: Спасибо Тиму Келли за улучшение, этот ловит -90 / -180, я думаю, что теперь завершено :) Ссылки и код отредактированы.

8 голосов
/ 06 июля 2010

/^-?\d+\.\d+\,\s?-?\d+\.\d+$/

  • ^ соответствует началу
  • $ соответствует концу строки
  • -? соответствует необязательному знаку минус
  • \d+ соответствует 1 или более цифрам
  • \. ставит точку (вы должны ее избежать, потому что . соответствует любому символу)
  • \s? соответствует дополнительному пробелу

Возможно, вы захотите принять пробелы в начале или в конце:

/^\s*-?\d+\.\d+\,\s?-?\d+\.\d+\s*$/

6 голосов
/ 06 июля 2010

Это возможно с Regex, однако вам может оказаться проще использовать split следующим образом

latitude, longitude = latlong.split(',')

А затем проверьте количество двух переменных.

1 голос
/ 18 июля 2014

Широта колеблется от -90 до 90 Долгота колеблется от -180 до 180

Я использовал регулярное выражение, которое оценивает значения, попадающие в диапазон с 4-6 десятичными точками (поскольку в Google Maps API в основном используется точность до 6 десятичных точек)

Широта : /^(-?(90\.0{4,6})|([0-8]\d{0,1})\.\d{4,6})$/

http://rubular.com/r/UpY74Y4fuG

Долгота: /^(-?((180)\.0{4,6})|((1[0-7][0-9])|([0-9]\d{0,1}))\.\d{4,6})$/

http://rubular.com/r/OQ0KS7puhv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...