Skip to main content
 首页 » 编程设计

c#之N-S 和 E-W 格式的纬度/经度正则表达式

2024年06月20日69think

我问的问题看起来与所有纬度/经度正则表达式问题类似,但我的问题对我无法找到的格式提出了不同的看法。我只想接受这样的格式:

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。分钟及其小数点与纬度情况下的相同。