正则表达式验证纬度和经度

Regex Validating Lat & long

我是 reg ex 的新手,我的任务是尝试更新我们的 regex 验证器。目前,他们检查纬度和经度是否真实,但现在我们需要确保它们在某个框内。 由于用户可以手动输入它或从地图中 select 它,因此我们需要考虑不同的样式(minutes/degrees 以及十进制)。

所需的验证--

LAT 50 through 72 & LONG: -130 through -180 OR 172 through 180)

当前正则表达式--

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}))?)))$"

我确实尝试 google 它并且正在玩这个

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

但我在阅读它时遇到了问题,所以我不知道如何更新它:

Typical inputs: Latitude could be either 52.5 OR 52:30:00

如果必须使用正则表达式(如 ),我可能会为 "lat" 使用类似的东西,范围从 5072:

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

Debuggex Demo

注意我在这里假设你的例子 52:30:00 意味着冒号后的两个数字组件必须在 059 范围内。

我会把 "long" 输入检查留给你...但我要强调你的尝试有一些问题:

^[+]?([1-8]?\d(\.\d+)?|50(\.0+)?),\s*[+]?(72(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$
  • 它包含 + 符号 - 这在您的示例输入中没有提到
  • 它包括 , 和 white-space \s* 检测 - 为什么会在这里 - 同样,您的示例输入不允许用户输入逗号或白色 space.

专注于一次为一个范围编写正则表达式,先 -130 through -180 然后 172 through 180,然后将两个单独的正则表达式与 |.

组合

您也没有提到您的正则表达式适用于哪种语言 - 我假设 JavaScript - 但如果不是这种情况你应该小心 - 并且在以后的问题中更清楚。

希望这对您有所帮助。