Как определить, содержит ли строка PHP только широта и долгота

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

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

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

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

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

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

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

 $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 также распознает научную нотацию.

 /^-*\d*\.\d+,[\b]*-*\d*\.\d+$/ 

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

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

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

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

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

 361.1234, 123.1234 

Лучше всего – если вам нужна серьезная проверка – это создать класс для хранения и проверки этих координат.