Как определить, содержит ли строка PHP ТОЛЬКО широту и долготу


Мне приходится работать со строками, которые могут содержать данные Lat/Long, например:

$query = "-33.805789,151.002060";
$query = "-33.805789, 151.002060";
$query = "OVER HERE: -33.805789,151.002060";

Для моих целей первые 2 строки верны, но последняя - нет. Я пытаюсь найти шаблон соответствия, который соответствовал бы широте и длине, разделенным запятой, или запятой и пробелом. Но если в строке есть что-то, кроме цифр, пробелов, точек, знаков минус и запятых, то совпадение должно быть неудачным.

Надеюсь, это имеет смысл, и ТИА!

Author: Alan Moore, 2010-02-27

4 answers

^[+-]?\d+\.\d+, ?[+-]?\d+\.\d+$

^ в начале и $ в конце убедитесь, что он соответствует полной строке, а не только ее части.

 10
Author: Wim, 2010-02-27 18:52:41

Проще всего решить с помощью регулярного выражения, как предложено в других ответах. Вот пошаговый подход, который тоже будет работать:

$result = explode(",", $query);  // Split the string by commas
$lat = trim($result[0]);         // Clean whitespace
$lon = trim($result[1]);         // Clean whitespace

if ((is_numeric($lat)) and (is_numeric($lon))) echo "Valid coordinates!";

Это решение будет принимать произвольные данные после запятой:

 "-33.805789,151.002060,ABNSBOFVJDPENVÜE";

Пройдет как ок.

Как правильно отмечает Фрэнк Фармер, is_numeric также распознает научную нотацию.

 1
Author: Pekka 웃, 2010-02-27 19:05:44
/^-*\d*\.\d+,[\b]*-*\d*\.\d+$/
 0
Author: stillstanding, 2010-02-27 18:54:10

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

/^\s*-?\d{1,3}\.\d+,\s*\d{1,3}\.\d+\s*$/

Это отвергло бы некоторые строки, которые допускали бы другие решения, такие как

-1-23-1-,210-
--123.1234,123.1234

Но это все равно допускало бы недопустимые значения, подобные этому:

361.1234, 123.1234

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

 0
Author: Mark E. Haase, 2010-02-27 19:12:19