2015-10-08 132 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

我还会说你应该把你的输入看作是一系列字符,而不是正数或负数。 –