可能重复:
Regex/Javascript to transform Degrees Decimal Minutes to Decimal Degrees
我有一些将十进制度分钟转换为十进制度的javascript代码。但是有点麻烦,我希望有人知道如何修复它。
当用户删除°
或有多余空格时,如何让它始终如一地工作?
使用°
字符可以很好用:
input "77° 50.51086497"
output "77.8418477495"
input "-113° 40.54687527"
output "-113.6757812545"
然而,如果没有°
它有时会破坏:
不工作
input "77 50.51086497"
ouput "775.0085144161667"
WORKING
input "-113 40.54687527"
output "-113.6757812545"
额外空格也一样:
不工作
input "77 ` ` ` ` ` ` ` `50.51086497"
output "775.0085144161667"
WORKING
input "-113 ` ` ` ` ` ` ` `40.54687527 "
output "-113.6757812545"
这是我的代码:Please see the JSFIDDLE TO TEST
function ddmToDeg(ddm) {
if (!ddm) {
return Number.NaN;
}
var neg= ddm.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0;
ddm= ddm.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,'');
ddm= ddm.replace(/\s/g,'');
var parts=ddm.match(/(\d{1,3})[.,°d]?(\d{0,2}(?:\.\d+)?)[']?/);
//dms.match(/(\d{1,3})[.,°d]?(\d{0,2})[']?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?/);
if (parts==null) {
return Number.NaN;
}
// parts:
// 0 : degree
// 1 : degree
// 2 : minutes
var d= (parts[1]? parts[1] : '0.0')*1.0;
var m= (parts[2]? parts[2] : '0.0')*1.0;
var dec= (d + (m/60.0))*neg;
return dec;
}
答案 0 :(得分:1)
我在最初的问题上回答了这个问题:Regex/Javascript to transform Degrees Decimal Minutes to Decimal Degrees
解决方案贴在你的小提琴上:http://jsfiddle.net/NJDp4/6/
dmsToDeg: function(dms) {
if (!dms) {
return Number.NaN;
}
var neg= dms.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0;
dms= dms.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,'');
var parts=dms.match(/(\d{1,3})[.,°d ]?\s*(\d{0,2}(?:\.\d+)?)[']?/);
if (parts==null) {
return Number.NaN;
}
// parts:
// 0 : degree
// 1 : degree
// 2 : minutes
var d= (parts[1]? parts[1] : '0.0')*1.0;
var m= (parts[2]? parts[2] : '0.0')*1.0;
var dec= (d + (m/60.0))*neg;
return dec;
}
这对“-113 40.54687527”而不是“77 50.51086497”起作用的原因是代码正在剥离空格和符号(留下“11340.54687527”和“7750.51086497”),然后抓住前3位数到用作度数(所以“113”和“775”)。我修改过它,以便在抓取两个数字之前不再删除空格。