纬度正则表达式匹配优化:前导零规则与范围校验问题
解决纬度正则匹配的前导零与度数校验问题
最终正则表达式(包含90°合法场景)
^(N|n|s|S)(?:(0?\d|[1-8]\d)°([0-5]\d)'([0-5]\d)(?:\.(\d{1,2}))?''|90°00'00(?:\.00)?'')$
简化版(仅支持0°-89°,符合你接受的最大值限制)
^(N|n|s|S)(0?\d|[1-8]\d)°([0-5]\d)'([0-5]\d)(?:\.(\d{1,2}))?''$
关键调整说明
1. 解决前导零问题
度数部分(0?\d|[1-8]\d)严格限制了合法格式:
- 0-9°:允许写成1位(如
2)或带单个前导零的2位(如02),自动拒绝多前导零(如002) - 10-89°:必须写成无前置零的2位数字(如
22),自动拦截带前导零的两位数(如052)
2. 处理90°的特殊校验(完整版包含)
通过分支90°00'00(?:\.00)?''单独限制:
- 仅当度数为
90时,分数和秒数必须为00,秒数可选带.00的小数部分 - 直接拒绝
N90°01'00''这类非法格式
3. 分秒的合法性校验
- 分数部分
([0-5]\d):确保范围在00-59之间 - 秒数部分
([0-5]\d)(?:\.(\d{1,2}))?:整数部分限制00-59,可选1-2位小数(支持00.0到59.99的格式)
测试验证
- 合法匹配:
N2°55'12.33''、N02°55'12.33''、N22°55'12.33''、N90°00'00'' - 非法拦截:
N002°55'12.33''(多前导零)、N052°55'12.33''(两位数带前导零)、N90°01'00''(90°但分秒非零)
内容的提问来源于stack exchange,提问作者Jepessen
相关产品推荐
相关产品推荐

