Я должен работать со строками, которые могут содержать данные 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
Лучше всего – если вам нужна серьезная проверка – это создать класс для хранения и проверки этих координат.