Saya mencoba membuat ekspresi reguler untuk mencocokkan koordinat lintang / bujur. Untuk mencocokkan angka presisi ganda yang saya gunakan (\-?\d+(\.\d+)?)
, dan mencoba menggabungkannya menjadi satu ekspresi:
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
Saya berharap ini cocok dengan ganda, koma, mungkin beberapa ruang, dan dua lagi, tetapi tampaknya tidak berhasil. Khususnya itu hanya berfungsi jika tidak ada ruang, tidak satu atau lebih. Apa yang telah saya lakukan salah?
Yang ini akan benar-benar cocok dengan nilai lintang dan bujur yang berada dalam kisaran yang benar:
Cocok
Tidak cocok
sumber
?:
sintaksis grup yang tidak menangkap, serta menangkap polaritas(^[-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))$
Saya menggunakan yang ini (format desimal, dengan 6 digit desimal):
Garis Lintang
Garis bujur
Berikut adalah intisari yang menguji keduanya, dilaporkan di sini juga, untuk kemudahan akses. Ini adalah tes Java TestNG. Anda perlu Slf4j, Hamcrest dan Lombok untuk menjalankannya:
sumber
Sebenarnya Alix Axel, regex di atas salah dalam garis lintang, titik pandang garis bujur.
Pengukuran garis lintang berkisar dari –90 ° hingga + 90 ° Pengukuran garis bujur berkisar dari –180 ° hingga + 180 °
Jadi regex yang diberikan di bawah ini memvalidasi lebih akurat.
Juga, sesuai pemikiran saya, tidak ada yang harus membatasi titik desimal dalam lintang / bujur.
ATAU untuk Tujuan C
sumber
99
untukLatitude
, sementara99
berada di luar jangkauan-90, +90
dan tidak valid.Regex breakdown:
-?
# menerima nilai negatif^
# Mulai string[0-9]{1,3}
# Cocokkan 1-3 digit (yaitu 0-999)(?:
# Cobalah untuk mencocokkan ...\.
# titik desimal[0-9]{1,10}
# diikuti oleh satu hingga 10 digit (yaitu 0-9999999999))?
# ... secara opsional$
# Akhir stringsumber
Coba ini:
Lihat di:
http://regexpal.com/
Rekatkan ekspresi di kotak atas, lalu masukkan hal-hal seperti ini di kotak bawah:
Regex breakdown:
Sekarang, apa yang TIDAK dilakukan adalah membatasi diri pada kisaran ini:
Alih-alih, ini sederhana membatasi diri ke rentang ini:
Tetapi intinya adalah terutama untuk memecah setiap bagian dari ekspresi.
sumber
Ini versi yang lebih ketat:
-90
-+90
-180
-+180
sumber
Python:
Garis Lintang:
result = re.match("^[+-]?((90\.?0*$)|(([0-8]?[0-9])\.?[0-9]*$))", '-90.00001')
Garis bujur:
result = re.match("^[+-]?((180\.?0*$)|(((1[0-7][0-9])|([0-9]{0,2}))\.?[0-9]*$))", '-0.0000')
Latitude seharusnya gagal dalam contoh.
sumber
@ macro-ferrari Saya memang menemukan cara untuk mempersingkat, dan tanpa melihat ke depan dalam terang semua pembicaraan terakhir tentang mesin regex
sumber
Saya yakin Anda menggunakan \ w (karakter kata) di mana Anda seharusnya menggunakan \ s (spasi putih). Karakter kata biasanya terdiri dari [A-Za-z0-9_], sehingga mengecualikan ruang Anda, yang kemudian gagal mencocokkan dengan tanda minus opsional atau digit.
sumber
Ini akan berfungsi untuk format seperti ini: 31 ͦ 37,4 'E
sumber
Rubi
Garis bujur -179.99999999..180
Latitude -89.99999999..90
sumber
Metode yang lengkap dan sederhana dalam tujuan C untuk memeriksa pola lintang dan bujur yang benar adalah:
di mana searchingString adalah input yang akan dimasukkan pengguna di bidang teks masing-masing.
sumber
PHP
Ini adalah versi PHP (nilai inputnya adalah:
$latitude
dan$longitude
):sumber
Anda dapat mencoba ini:
sumber
Coba ini:
sumber
Coba ini:
sumber