2011-05-09 15 views
-1

可能重复:
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; 
} 
+0

考虑重写这个问题,使其更普遍适用于他人。解决你的具体问题并不能帮助别人。我敢打赌,如果你将这个重写成一个关于使用正则表达式来检测token的存在的更普遍的问题,你很快就会得到很多好的答案。 – Marplesoft 2011-05-09 18:16:19

+0

啊,很高兴知道,谢谢。 – capdragon 2011-05-09 18:40:59

回答

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“)。我已经修改了这个,以便在抓取这两个数字之前不再去掉空格。

+0

这是一个确切的重复? – 2011-05-09 18:19:44

+0

不完全。这个问题是原文的延伸,但是这里的问题在原文的评论中被问到,并且在原始问题上也得到了回答(可能在发布之后)。它几乎肯定可以作为(无意)重复来关闭。 – Prestaul 2011-05-09 18:23:47

+0

嗯,我可以说没关系。正如Marplesoft指出的那样,它可以使用更好的问题标题。 – 2011-05-09 18:25:50