正则表达式帮助一些Javascript代码

时间:2011-05-09 18:10:04

标签: javascript regex

  

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

1 个答案:

答案 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”)。我修改过它,以便在抓取两个数字之前不再删除空格。