2015-10-08 133 views
-3

我是一個完整的新手,註冊前並負責嘗試更新我們的正則表達式驗證程序。目前,他們檢查經緯度是真實的,但現在我們需要確保它們位於特定的框內。 由於用戶可以手動輸入或從地圖中選擇,我們可以使用不同的樣式(分/度和小數),我們需要考慮它們。正則表達式驗證經緯度

通過72 &長期渴望validation--

LAT 50:-130 -180通過OR 172通過180)

電流RegEx--

LAT: 
"^(-?((90((\.0{1,15})|(\:00\:00))?)|(([0-8]?\d)((\.\d{1,15})|((\:[0-5]\d){2}))?)))$" 

LONG: "^(-?((180((\.0{1,15})|(\:00\:00))?)|(((\d{1,2})|(1[0-7]\d))((\.\d{1,15})|((\:[0-5]\d){2}))?)))$" 

我確實嘗試谷歌它,並與此玩弄

^[+]?([1-8]?\d(\.\d+)?|50(\.0+)?),\s*[+]?(72(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$ 

,但我有甚至讀它,所以我不能告訴你怎麼更新一個問題:

典型的輸入:緯度可能是要麼52.5 OR 52:30:00

+5

這是*不是*非常好的方法。只需使用標準數字正則表達式,然後將捕獲的字符串解析爲數字,並檢查它們是否在有效範圍內。使用正則表達式不必要的複雜。 –

+0

你能向我們展示輸入嗎? –

+0

可能會有麻煩... – user3791372

回答

0

如果正則表達式時,必須使用(如mentioned in your comment above)我可能會像這樣的東西爲「LAT」射程50經過72

^(?:(?:[56]\d|7[01])(?:\.\d{1,15}|(?::(?:[0-5]\d|\d)){1,2})?|72(?:\.0{1,15}|(?::00){1,2})?)$ 

Regular expression visualization

Debuggex Demo

注意我這裏假設你的榜樣52:30:00意味着在冒號後面兩個數量的組件必須在059範圍。

我將離開「長」輸入檢查由你......但我要強調,你的嘗試有一些問題:

^[+]?([1-8]?\d(\.\d+)?|50(\.0+)?),\s*[+]?(72(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$ 
  • 它包括+符號 - 這是沒有提到在您的示例輸入
  • 它包括,和空白區域\s*檢測 - 爲什麼在這裏 - 再次您的示例輸入不允許用戶輸入逗號或空格。

注意力集中在一個時間寫了一個範圍內的正則表達式,-130 through -180第一則172 through 180,然後用|結合兩個不同的正則表達式。

您也沒有提及您的正則表達式適用於哪種語言 - 我使用了JavaScript - 但如果不是這種情況,您應該小心 - 並且在將來的問題中會更清楚。

希望這會有所幫助。

+0

謝謝你的幫助。我試圖用一個生成器來創建這一個,不知道正則表達式不知道[+]是在尋找一個真正的+還是隻是說它是一個正數。同樣的藉口,並\ *。我非常感謝你的幫助,特別是在解釋爲什麼我的解決方案不起作用的時候,因爲現在我覺得自己有更多的裝備來完成冗長的驗證! – CluelessInAK

+0

我還會說你應該把你的輸入看作是一系列字符,而不是正數或負數。 –