Pavel
Pavel

Reputation: 5353

Latitude/Longitude Regular Expression

I'm in the middle of developing a Twitter app. While parsing JSON I need to extract latitude and longitude, store them in a database and then later use them in an Android app. Basically, I managed to extract it, but people are sending their tweets from different devices (iPhones, Blackberries, etc.). I'm getting different responses. Here are the examples:

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

Now my question is: how can I use a regular expression to match latitude and longitude and extract it in a form of array in JavaScript regardless of the word that appears in front of it?

Upvotes: 3

Views: 13749

Answers (5)

Ashkan
Ashkan

Reputation: 1893

format: latitude , longitude

tested with python:

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

Upvotes: 0

neeraj
neeraj

Reputation: 13

In 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));

Upvotes: -1

xkeshav
xkeshav

Reputation: 54022

i Hope this will work

UPDATE

$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);

display

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

Upvotes: 1

icktoofay
icktoofay

Reputation: 129011

You could use something like this:

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

Since you tagged your question with both PHP and JavaScript, I'll show you how to use it in both.

In PHP:

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

In 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

For fun, here's Python too:

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

Upvotes: 11

Imi Borbas
Imi Borbas

Reputation: 3703

This works for all strings you specified:

$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);

Upvotes: 1

Related Questions