DDMMSSH格式纬度正则优化:分/秒为60时后续值需为0
实现分/秒为60时后续值全为0的经纬度正则校验
完全可以通过正则实现这个约束。以下是修正后的正则,同时保留原格式的兼容性(支持DDH、DDMMH、DDMMSSH、DDMMSS.S*H等格式):
纬度校验正则
var latregex = new RegExp("((900000(?:\\.0*)?)|(?:[0-8]\\d)(?:(?:[0-5]\\d)(?:(?:[0-5]\\d)(?:\\.\\d*)?|60(?:\\.0*)?)?|6000(?:\\.0*)?))[NS]");
经度校验正则
var longregex = new RegExp("((1800000(?:\\.0*)?)|(?:(?:[0-8]\\d|17\\d)(?:(?:[0-5]\\d)(?:(?:[0-5]\\d)(?:\\.\\d*)?|60(?:\\.0*)?)?|6000(?:\\.0*)?)))[EW]");
关键逻辑说明
- 极值兼容:单独处理纬度90°、经度180°的情况,允许这类极值后跟随任意位全0的小数(比如
900000.000S合法)。 - 分的约束:当分字段为
60时,后续的秒字段必须是00且小数位全为0(比如346000S、346000.000S合法,346060S非法)。 - 秒的约束:当秒字段为
60时,其小数部分必须全为0(比如345960.000S合法,345960.123S非法)。 - 正常范围兼容:分、秒在00-59时,仍支持原有的任意小数位格式(比如
341111.456S合法)。
测试案例
- 合法输入:
3460S、346000S、346000.000S、345960.000S、900000S - 非法输入:
346060S、341160.123S、900001S
内容的提问来源于stack exchange,提问作者tj26
相关产品推荐
相关产品推荐

