用户在编辑框内输入经纬度,点按钮,搜一些东西,我不想麻烦做成限定输入的那种,
想做成类似Google Maps搜索框那样,就一个编辑框,输入
纬度,经度
搜,就行了。
两者
中间可以用中英文逗号、空格隔开但是我这里的经纬度,用户可以以小数、度分秒等方式输入如
113.123, 23.444
113度12分25.6秒, 23度12分11.6秒, 南纬的时候 -23度12分11.6秒 即可
113:12:25.123, 23:15:16.111
113°12′25.123″, 23°12′16.111″这些写法都可以,最终都转换成两个小数,怎么解析呀,救高手
想做成类似Google Maps搜索框那样,就一个编辑框,输入
纬度,经度
搜,就行了。
两者
中间可以用中英文逗号、空格隔开但是我这里的经纬度,用户可以以小数、度分秒等方式输入如
113.123, 23.444
113度12分25.6秒, 23度12分11.6秒, 南纬的时候 -23度12分11.6秒 即可
113:12:25.123, 23:15:16.111
113°12′25.123″, 23°12′16.111″这些写法都可以,最终都转换成两个小数,怎么解析呀,救高手
解决方案 »
- JAVASCRIPT/JQUERY:如何捕捉这样NB的事件??
- 求助大神jQuery或者JS的图片轮播怎么从指定图开始播放
- jquery和java实现简单的文件管理
- js列表控件dhtmlxtreegrid 能在数据中直接添加parentid吗,非要在json数据中把子数据添加到父数据的rows中吗?
- javascript 小问题
- createPopup:问题,createPopup创建的层不能使用INPUT,<a也无效,请问如何解决。
- 大家进来帮忙看下这个js
- 修改了页面的js方法如果不更新本地缓存就没有效果,怎么办?高人指教
- 在客户端怎样判断某个网页是否加载完成?
- 如何在一个frame里刷新另一个frame里面的内容?
- 求高手帮忙修改此段TAB的JS 让切换的同时光标聚焦到文本框内
- 请问有没有可能无论当前用什么浏览器在看网页,弹出的网页都用IE打开?
所以,后三种应该用一种方法就行了,即使用户输入成了113张12李25.6王,也能给他解析出来得了。
var a= s.split(",");for(var i=0;i<a.length;i++ ){
alert(a[i].replace(/^\s|\s$/i,'').match(/(-?[0-9\.]+?)[^0-9\.]+([0-9\.]*?)[^0-9\.]+([0-9\.]+?)/i));
}
<META NAME="Author" CONTENT="theforever(碧海情天),赵亮">
<meta http-equiv="email" content="theforever·163.com">
<meta http-equiv="blog" content="blog.csdn.net/theforever">
<script type="text/javascript">
var s="113°12′25.123, 23°12′16.111";
var a= s.split(",");
for(var i=0;i<a.length;i++ ){
alert(a[i].replace(/[^\d]/g,'|'));
}
</script>
这样的结果更准确。对转换后的结果可以再次split("|"),根据结果的length可以判断是哪种类型,然后进行相应的数据运算处理。
//可以匹配下面的几种情况
/*
X
X.Y
X度
X度Y分
X度Y分Z秒
X度Y分Z.W秒
X:Y
X:Y:Z
X:Y:Z.W
X°
X°Y′
X°Y′Z″
X°Y′Z.W″*/
function check(inputSrc) {
var reg = [
/^([0-9]{1,3})((?:[\.])([0-9]{1,3})?)$/g,
//X.Y X=$1,Y=$3
/^([0-9]{1,3})度((([0-9]{1,2})分((([0-9\.]+)秒)?))?)$/g,
//X度Y分Z.W秒 X=$1,Y=$4,Z.W=$7
/^([0-9]{1,3})(?:\:)((([0-9]{1,2})(?:\:)((([0-9\.]+))?))?)$/g,
//X:Y:Z.W X=$1,Y=$4,Z.W=$7
/^([0-9]{1,3})°((([0-9]{1,2})′((([0-9\.]+)″)?))?)$/g //X°Y′Z.W″X=$1,Y=$4,Z.W=$7
];
var valid = false;//是否有效
for(var i=0,len=reg.length;i<len;i++) {
if(reg[i].test(inputSrc)) {//获得了匹配,格式正确
if(i==0) {
return parseFloat(RegExp.$1 + '.'+ (RegExp.$3==''?0:RegExp.$3));//返回转换后的小数
} else {
var degree = RegExp.$1;//度
var minute = RegExp.$4==''?0:RegExp.$4;//分
var second = RegExp.$7;//秒
if(second!='') {//
if(reg[0].test(second)) {//判断秒是否符合 X.Y的格式,排除不是整数或者小数的情况
second = parseFloat(RegExp.$1 + '.'+ (RegExp.$3==''?0:RegExp.$3));
} else {
continue;//输入的无效,需要进行下一个正则匹配
}
} else {
second = 0;
}
//这里需要进行 度分秒 单位换算
//var XXX = degree + ......
return XXX;
}
}
}
if(valid==false) return false;//说明输入的都不是符合格式的数据}
大概就这样了,正则应该没问题,楼主自己完善试试
var s="113°12′25.123, 23°12′16.111";
var a= s.split(",");
for(var i=0;i<a.length;i++ ){
alert(a[i].replace(/[^\d]/g,'|'));
}
</script>我觉得这个就行啊
reg[0] = /^([0-9]{1,3})(((?:[\.])([0-9]{1,3}))?)$/,
//X.Y X=$1,Y=$4
里面的 RegExp.$3改为 RegExp.$4
把4个正则的选项 g 都去掉,否则容易第一次找到,第二次就找不到了解释一下:(((?:[\.])([0-9]{1,3}))?) 这个正则表示 匹配 ((?:[\.])([0-9]{1,3})) 1次或者多次,整体的也就是匹配 X 或者 X.Y
function parseLngLat(strLngLat) {
var strList = [];
var sum = 0;
//先解析出用逗号或空格分开的经纬度
strList = strLngLat.split(new RegExp(",|,|[ +]"));
var gLngLat;
if (strLngLat.match(/度|°|:/) != null/*.length > 0*/) {
var strDMS = [];
strDMS = strList[0].split(/度|分|:|°|′/g, 3); //match(/\d+/g);
var numDMS = [];
//strDMS可能只有“113度”这种情况,后边没有的补0
for (var i = 0; i < 3; i++) {
if (strDMS[i] == null) {
numDMS[i] = 0;
} else {
numDMS[i] = parseFloat(strDMS[i]);
}
}
var lng = numDMS[0] + numDMS[1] / 60 + numDMS[2] / 3600;
strDMS = strList[1].split(/度|分|:|°|′/g, 3); //.match(/\d+/g);
//strDMS可能只有“113度”这种情况,后边没有的补0
//strDMS可能只有“113度”这种情况,后边没有的补0
for (i = 0; i < 3; i++) {
if (strDMS[i] == null) {
numDMS[i] = 0;
} else {
numDMS[i] = parseFloat(strDMS[i]);
}
}
var lat = numDMS[0] + numDMS[1] / 60 + numDMS[2] / 3600; gLngLat = new google.maps.LatLng(lat, lng);
} else {
gLngLat = new google.maps.LatLng(parseFloat(strList[1]), parseFloat(strList[0]));
}
return gLngLat;}