Bir PHP dizge SADECE enlem ve boylamını içerip içermediğini belirlemek için nasıl

3 Cevap php

Ben böyle Lat / Long veri içeren dizeleri ile çalışmak zorunda:

$query = "-33.805789,151.002060";
$query = "-33.805789, 151.002060";
$query = "OVER HERE: -33.805789,151.002060";

Benim amaçlar için, ilk 2 dizeleri doğru, ama sonuncusu değil. Ben bir lat ve uzun bir virgülle ayrılmış maç olacak bir maç desen, ya da bir virgül ve bir boşluk anlamaya çalışıyorum. Bu sayıların dışında dize şey varsa Ama, boşluk, nokta, eksi işaretleri ve virgüller, o maçı başarısız gerekir.

Umarım bu mantıklı ve TIA!

3 Cevap

^[+-]?\d+\.\d+, ?[+-]?\d+\.\d+$

^ sonunda başlangıç ​​ve $ azından tam dize değil, bunun sadece bir parçası uyduğundan emin olun.

Bu diğer yanıtlar önerilen gibi bir regex çözmek için basit bulunuyor. Burada da işe bir adım-adım yaklaşım:

$result = explode(",", $query);  // Split the string by commas
$lat = trim($result[0]);         // Clean whitespace
$lon = trim($result[1]);         // Clean whitespace

if ((is_numeric($lat)) and (is_numeric($lon))) echo "Valid coordinates!";

Bu çözüm, bir virgülden sonra rasgele veri kabul eder:

 "-33.805789,151.002060,ABNSBOFVJDPENVÜE";

olarak ok geçecek.

Frank Farmer doğru belirttiği gibi, is_numeric Bilimsel gösterim de tanıyacaktır.

Regex yaklaşım gerçekten bu boylam ve enlem geçerlidir, ancak burada diğerleri zaten yayınlanmıştır daha hassas olacaktır biri doğrulamak edemez:

/^\s*-?\d{1,3}\.\d+,\s*\d{1,3}\.\d+\s*$/

Bu gibi başkalarının çözümler sağlayacak bazı dizeleri, reddederdi

-1-23-1-,210-
--123.1234,123.1234

Ama hala bu gibi geçersiz değerleri sağlayacak:

361.1234, 123.1234

En iyi bahis - Ciddi doğrulama gerekirse - bu koordinatları depolamak ve doğrulamak için bir sınıf oluşturmak için.