使用正则表达式验证纬度和经度坐标并显示错误

9

如何使用正则表达式验证文本字段的纬度和经度,并显示错误消息?

 <div class="form_style">
    <fieldset>
      <label for="contentText" class="fixedwidth">Name:</label>
      <input type="text" name="content_txt" id="contentText" class="inputtext" ><br/> 
    </fieldset>
    <fieldset>
      <label for="address" class="fixedwidth">Address:</label>
       <input type="text" id="address"class="inputtext" /><br/>
    </fieldset>
    <fieldset>
       <label for="lat" class="fixedwidth">Lat:</label>
     <input type="text" id="lat"class="inputtext" /><br/>
    </fieldset>
    <fieldset>
      <label for="lng" class="fixedwidth">Lng:</label>
     <input type="text" name="lng" id="lng"class="inputtext" /><br/>
    </fieldset>
    <fieldset>
      <label for="type" class="fixedwidth">Type:</label>
     <input type="text" id="type"class="inputtext" /><br/>
    </fieldset>
    <button id="FormSubmit">Add Marker</button>
</div>

哪些是有效的? - Mosho
所以我认为正则表达式应该是类似于^-?([1-8]?[1-9]|[1-9]0).{1}\d{1,6}的东西。 - Ryan
1
你期望有效值是什么样子的?纬度范围为-90到+90,经度范围为-180到+180,但对于行政边界可能更大。此外,使用+/-或n/s,e/w吗?度(°),分(')或秒(")指示器如何?值如何被分隔:通过空格、点、冒号还是没有分隔符? - RobG
如果只是测试整数值,那么lat >= -90 && lat <= 90long >= -180 && long <= 180比正则表达式更简单且输入更少。 - RobG
4个回答

19
<script type="text/javascript">  

var latitude = document.getElementById(lat).value;
var longitude = document.getElementById(lng).value;

var reg = new RegExp("^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,6}");

if( reg.exec(latitude) ) {
 //do nothing
} else {
 //error
}

if( reg.exec(longitude) ) {
 //do nothing
} else {
 //error
}

</script>

1
纬度和经度不应该有单独的正则表达式吗?-90到90与-180到180? - Jason Aller
2
你是正确的!我刚刚使用了@Kelv提供的正则表达式。显然像这样的正则表达式应该可以工作:^(-?\d+(.\d+)?),\s*(-?\d+(.\d+)?)$ 链接 尽管我还没有尝试过。 - goodguytrigu
工作正常!感谢您的帮助。 - Ryan
2
我在我的代码中使用了i,但它总是进入JavaScript的else条件。这意味着它拒绝了我的任何输入。 - Divyesh Jesadiya

13

随意在此测试您的正则表达式:

^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,6}

正则表达式可视化

Debuggex演示

在此情况下,这个正则表达式将匹配一个负数或正数,要么是(1个数字,不包括'0'和'0'),要么是(一个或两个数字,第一个数字不包括9,两个数字都不包括'0'),后面跟着一个小数点和多达6位其他数字。如果这正好符合您的需求,那么它可以工作。如果您需要其他格式,请在评论中发布,我会尝试编写适当的正则表达式。

Google搜索“正则表达式”应该能够给您提供所需的所有信息。

如果您只需要-90到90之间(或-180到180之间)的数字,您只需要这样做:

if (typeof num === 'number' && num <= 90 && num >= -90)
    //valid
else
    //invalid

如果你需要像度数符号(°)或罗盘方向这样的符号,那么正则表达式可能会有所帮助。

以下是几种格式的概述:

http://www.geomidpoint.com/latlon.html


1

只需要这样做:

function isLatitude(lat) {
  return isFinite(lat) && Math.abs(lat) <= 90;
}

function isLongitude(lng) {
  return isFinite(lng) && Math.abs(lng) <= 180;
}

-1

我对每个值使用了两个不同的正则表达式。

纬度正则表达式:

const latRegex = /^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,15}/g;

经度正则表达式:

const lngRegex = /^-?(([-+]?)([\d]{1,3})((\.)(\d+))?)/g;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接