2010-02-27 58 views
4

我有可能包含緯度/經度數據,像這樣的字符串的工作:如何確定一個PHP字符串只包含經度和緯度

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

對於我而言,第2串是正確的,但最後一個不是。我試圖找出一個匹配模式,匹配經緯度,長逗號,逗號和空格。但是,如果字符串中包含數字,空格,點號,減號和逗號之外的任何內容,那麼它會導致匹配失敗。

希望這是有道理的,TIA!

回答

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

^在末開始和$確保其完整的字符串相匹配,而不是隻是它的一部分。

+0

是的,這工作完美,謝謝你! – Alexia 2010-02-27 19:09:38

+0

@Alexia可以通過單擊旁邊的複選標記將答案標記爲已接受。 – 2010-02-27 19:14:06

+0

哦,對不起,我從來沒有見過這個......不知道有一個支票大聲笑! – Alexia 2010-02-27 19:17:18

1

用其他答案中建議的正則表達式解決問題最簡單。這裏是一步一步的做法,將工作太:逗號後

$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"; 

將通過爲OK。

正如弗蘭克法默正確指出的那樣,is_numeric也將承認科學記數法。

+1

看起來比正則表達式更容易一些...... ;-) – Wim 2010-02-27 18:53:59

+0

雖然'explode'中忘了分隔符:'explode(',',$ query)' – Wim 2010-02-27 18:54:44

+0

@Wim我注意到了,更正了。乾杯。 – 2010-02-27 18:55:08

0

正則表達式的方法不能真正驗證經度和緯度是有效的,但這裏有一個會更精確的比別人貼已經:

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

這會拒絕某些字符串他人「解決方案將允許,如

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

但它仍然會允許這樣的無效值:

361.1234, 123.1234 

你最好的選擇 - 如果你需要認真的驗證 - 是創建一個類來存儲和驗證這些座標。

+0

Thx!我也會嘗試這一個...我需要這個的原因是隻檢查一個有效的「看」經緯度。然後,我將它們發送給一個實際的地理編碼器,並且實際驗證它是否爲真實位置。只想限制我發送給地理編碼器的數據量。 – Alexia 2010-02-27 19:15:02

相關問題