我问的问题看起来与所有纬度/经度正则表达式问题类似,但我的问题对我无法找到的格式提出了不同的看法。我只想接受这样的格式:
LAT: XX-XX.XX N|S
LON: XXX-XX.XX E|W
这适用于 C# 窗口文本条目,其中纬度和经度在单独的文本框中输入。
我希望格式在这些位置仅接受 1 个破折号 (-) 和 1 个小数(即负值无效)并正确执行范围,以便需要输入所有位值,例如:
LAT 0-90 北或南
00-00.00 N valid
5-00.00 N invalid
05-00.00 N valid
90-00.00 N valid
89-59.99 S valid
90-60.00 S invalid
91.00.00 N invalid
LON 0-180 东或西
0-0.0 E invalid
15-00.00 E invalid
015.00.00 E valid
180-00.00 E valid
180-01.00 E invalid
179-59.99 W valid
179-60.00 W invalid
181-00.00 W invalid
我知道如何逐位完成,例如 Latitude: [0-9][0-9]-[0-5][0-9].[0-9][0-9] [N|S]
这就是我对 RegEx 创作的了解程度。
一如既往,我们将不胜感激。
请您参考如下方法:
我的建议是
String patternLatitude = @"^(90\-00\.00)|([0-8]\d\-[0-5]\d\.\d\d) (N|S)$";
String patternLongitude = @"^(180\-00\.00)|((1[0-7]\d)|(0\d\d)\-[0-5]\d\.\d\d) (W|E)$";
提供给定的例子
015.00.00 E valid
实际上应该是无效的。更多测试示例(均无效)
090-00.01 N
180-00.01 E
190-00.00 E
200-00.00 E
解释:
纬度: 90-00.00 是一个特例(90 度的唯一可能值),对于其他度数我们可以写下[0..8]\d;分钟是 [0..5]\d,小数点只有两位数:\d\d。
经度:180-00.00 是一个特例(唯一可能有 180 度);第二种情况 1** 纬度:因为我们没有 180 或 190 纬度,我们可以将它们作为 1[0-7]\d;最后,如果纬度以 0 开头,它可以有任意两位数:0\d\d。分钟及其小数点与纬度情况下的相同。
