使用正则表达式验证 GPS 坐标

Validate GPS coordinates with use of regexp

本文关键字:GPS 坐标 验证 正则表达式      更新时间:2023-09-26

Javascript函数获取一个数组作为参数,这是输入。

var ValidCoordinates = [
    "-23, 25",
    "4, -3",
    "24.53525235, 23.45235",
    "04, -23.234235",
    "0, 1,2",
    "0.342q0832, 1.2324v"
    "43.91343345, 143"
  ];

之后,我们肯定在循环中调用函数:

isValidCoordinates(ValidCoordinates[i])

我创建了一个函数来解决这个问题:

function isValidCoordinates(coordinates){
  var args = coordinates.split(",");
  var lat = /^(-?[1-8]?'d(?:'.'d{1,18})?|90(?:'.0{1,18})?)$/;
  var lon = /^(-?(?:1[0-7]|[1-9])?'d(?:'.'d{1,18})?|180(?:'.0{1,18})?)$/;
  //var re = ^[-+]?([1-8]?'d('.'d+)?|90('.0+)?),'s*[-+]?(180('.0+)?|((1[0-7])|([1-9]?'d)('.'d+)?)$;
  console.log(args[1]);
  if(args[0].match(lat) == true && args[1].match(lon) == true){ 
    return true;
  } else{
    return false;
  }
}

我认为latlon变量都满足要求,但正则表达式匹配总是失败。 re是另一个正则表达式,它可能匹配所有两个值。

您的 GPS 值之间有空格,因此,使用以下正则表达式拆分:

var args = coordinates.split(/,'s+/);

's+匹配一个或多个空格。查看 JS 演示:

var ValidCoordinates = [
    "-23, 25",
    "4, -3",
    "24.53525235, 23.45235",
    "04, -23.234235",
   "1, 1,2",
    "43.91343345, 143"
  ];
  
isValidCoordinates(ValidCoordinates[4]);
function isValidCoordinates(coordinates){
  var args = coordinates.split(/,'s+/);
  var lat = /^(-?[1-8]?'d(?:'.'d{1,18})?|90(?:'.0{1,18})?)$/;
  var lon = /^(-?(?:1[0-7]|[1-9])?'d(?:'.'d{1,18})?|180(?:'.0{1,18})?)$/;
  
  console.log("'" + args[0] + "', '" +  args[1] + "'");
  if(lat.test(args[0].trim()) == true && lon.test(args[1].trim()) == true){ 
    console.log("Yes");
  } else{
    console.log("No");
  }
}

从可理解性的角度来看,我认为解析值并使用数字比较来验证它们更有意义。

var coordsStrings = [
  "-23, 25",
  "4, -3",
  "24.53525235, 23.45235",
  "04, -23.234235",
  "43.91343345, 143",
  "443.91343345, 143",
  "r43.91343345, 143"
];
var coordsNumbers = coordsStrings.map(function(coordsString) {
  return coordsString
    .split(/'s*,'s*/)
    .map(function(coordString) {
      return Number.parseFloat(coordString);
    });
});
// the value of coordsNumbers = [
//   [-23, 25]
//   [4, -3]
//   [24.53525235, 23.45235],
//   [4, -23.234235],
//   [43.91343345, 143]
// ];
// and then your validate logic 
//Latitude = -90 -- +90
//Longitude = -180 -- +180
var isValid = function(coordNumbers) {
  var lat = coordNumbers[0];
  var lng = coordNumbers[1];
  return lat >= -90 && lat <= 90 && lng >= -180 && lng <= 180;
};
for (var i = 0; i < coordsNumbers.length; i++) {
  var v = isValid(coordsNumbers[i]);
  /*...*/
  document.write(coordsNumbers[i][0] + ', ' + coordsNumbers[i][1] + ' is ' + (v ? 'valid':'<strong>invalid</strong>')+'</br>');
}