可能重复:
Regex/Javascript to transform Degrees Decimal Minutes to Decimal Degrees正则表达式帮助在一些JavaScript代码
我有一个转换十进制度纪要十进制度一些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;
}
考虑重写这个问题,使其更普遍适用于他人。解决你的具体问题并不能帮助别人。我敢打赌,如果你将这个重写成一个关于使用正则表达式来检测token的存在的更普遍的问题,你很快就会得到很多好的答案。 – Marplesoft 2011-05-09 18:16:19
啊,很高兴知道,谢谢。 – capdragon 2011-05-09 18:40:59