AngularJS经纬度正则表达式验证报错,请求排查问题原因
经纬度正则问题排查与修复
首先看你提供的正则表达式明显不完整(结尾的((1[0-7]...没有闭合),这肯定会导致语法错误。咱们一步步梳理问题,同时给出完整的修复方案:
核心问题点
- 正则语法不合法:你写的正则没有完成括号闭合和规则补充,直接运行会抛出正则语法异常,这是最直接的错误。
- 规则覆盖不全:就算写完现有片段,也可能没覆盖经纬度的所有合法范围(比如纬度0值、经度0-90度的情况、小数位数的合理匹配等)。
修复后的完整Angular代码
var app = angular.module('myapp', []); app.controller('latlong', function($scope) { $scope.name = "Validation"; // 修正了你原代码里的拼写错误:Valiadtion → Validation $scope.lat = "latitude"; $scope.long = "longitude"; $scope.submit = function() { var inputLatLong = $scope.lati; // 假设这是用户输入的经纬度字符串,格式如"40.7128, -74.0060" // 完整经纬度正则:匹配-90~90的纬度、-180~180的经度,支持正负号、可选小数、逗号分隔 var reg = /^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/; if(reg.test(inputLatLong)){ alert("经纬度格式正确!"); } else { alert("经纬度格式错误,请检查:需符合「纬度, 经度」格式,范围为纬度-90~90,经度-180~180"); } }; });
正则规则拆解说明
- 纬度匹配:
[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?)- 支持可选正负号,匹配0-89度(带任意小数位),或者精确的90.0...(不能超过90)
- 经度匹配:
[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)- 支持可选正负号,匹配0-179度(带任意小数位),或者精确的180.0...(不能超过180)
- 中间用逗号分隔,经度前允许任意空白字符(
\s*),兼容用户输入时的空格习惯
内容的提问来源于stack exchange,提问作者SRK
相关产品推荐
相关产品推荐

