【问题标题】:Latitude/Longitude Regular Expression纬度/经度正则表达式
【发布时间】:2011-07-24 08:56:10
【问题描述】:

我正在开发一个 Twitter 应用程序。在解析 JSON 时,我需要提取纬度和经度,将它们存储在数据库中,然后在 Android 应用程序中使用它们。基本上,我设法提取了它,但人们正在从不同的设备(iPhone、黑莓等)发送推文。我得到不同的回应。以下是示例:

ÜT: 51.554644,-0.003976
51.576100, -0.031600
Iphone: 51.554644,-0.003976

现在我的问题是:如何使用正则表达式匹配纬度和经度,并在 JavaScript 中以数组的形式提取它,而不管它前面出现的单词是什么?

【问题讨论】:

    标签: php javascript regex


    【解决方案1】:

    你可以这样使用:

    ([0-9.-]+).+?([0-9.-]+)
    

    由于您使用 PHP 和 JavaScript 标记了您的问题,我将向您展示如何在两者中使用它。

    在 PHP 中:

    preg_match('/([0-9.-]+).+?([0-9.-]+)/', $str, $matches);
    $lat=(float)$matches[1];
    $long=(float)$matches[2];
    // coords are in $lat and $long
    

    在 JavaScript 中:

    var matches=str.match(/([0-9.-]+).+?([0-9.-]+)/);
    var lat=parseFloat(matches[1]);
    var long=parseFloat(matches[2]);
    // coords are in lat and long
    

    为了好玩,这里也是 Python:

    import re
    match = re.match(r'([0-9.-]+).+?([0-9.-]+)', str)
    lat = float(match.group(1))
    long = float(match.group(2))
    # coords are in lat and long
    

    【讨论】:

    • 嘿。我知道如何在 php 中做到这一点,但在 js 中却不知道 :) 所以感谢您向我展示这两个代码。你是一颗钻石。
    • 除非我错过了什么,这只是匹配数字部分。您仍然需要验证这些数字是否在适当的纬度/经度范围内 (-90.0 .. +90.0,-180.0 .. +180.0)
    • @NWS:当然。用正则表达式做所有事情是很疯狂的。
    • 太棒了! MySQL 上的 REGEXP 也有吗?
    • @RodrigoPolo:不,但是假设 MySQL 使用与其他语言相同的正则表达式语法和语义,它应该可以类似地工作。
    【解决方案2】:

    我希望这会奏效

    更新

    $output= 'ÜT: 51.554644,-0.003976';
    function makePerfect($x)
    { 
      return preg_replace('/[^-?0-9\.]/','', $x);
    }
    $lenLong=explode(',',$output);
    $final=array_map('makePerfect',$lenLong);
    //debug like this
    echo "<pre>";
    print_r($final);
    

    显示

    Array
    (
        [0] => 51.554644
        [1] => -0.003976
    )
    

    【讨论】:

    • 取坐标的绝对值。通常您希望保持标志完好无损。
    • list($lat,$long)=$final 将输出单独的经纬度值
    【解决方案3】:

    这适用于您指定的所有字符串:

    $str = "Iphone: 51.554644,-0.003976";
    
    preg_match_all("/(?<lat>[-+]?([0-9]+\.[0-9]+)).*(?<long>[-+]?([0-9]+\.[0-9]+))/", $str, $matches);
    
    $lat = $matches['lat'];
    $long = $matches['long'];
    
    var_dump($lat, $long);
    

    【讨论】:

      【解决方案4】:

      在javascript中-

      var t1 = "ÜT: 51.554644,-0.003976";
      var t2 = "51.576100, -0.031600";
      var t3 = "Iphone: 51.554644,-0.003976";
      
      var reg = new RegExp(/[+-]?[\d.]+/g);
      
      console.log(t1.match(reg));
      console.log(t2.match(reg));
      console.log(t3.match(reg));
      

      【讨论】:

        【解决方案5】:

        格式:纬度、经度

        用python测试过:

        (?<![0-9\.])((-?[0-8]?[0-9](\.\d*)?)|(-?90(\.[0]*)?))[\ ]*,[\ ]*((-?([1]?[0-7][0-9]|[1-9]?[0-9])(\.\d*)?)|-?180(\.[0]*)?)(?![0-9\.])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-11
          • 1970-01-01
          • 2011-03-31
          • 1970-01-01
          • 1970-01-01
          • 2010-10-04
          • 2011-03-12
          • 1970-01-01
          相关资源
          最近更新 更多