Komputer, Pemrograman
PHP (regex) - apa itu? Contoh dan memeriksa ekspresi reguler
Ketika bekerja dengan teks dalam bahasa pemrograman modern, pengembang terus-menerus bertemu dengan tujuan validasi input untuk memenuhi pola yang diinginkan, mencari dan mengganti fragmen uji dan jenis lain dari operasi pengolahan informasi karakter. Mengembangkan algoritma validasi sendiri menyebabkan hilangnya waktu, kompatibilitas kode dan kompleksitas dalam pengembangan dan modernisasi.
Pesatnya perkembangan bahasa internet dan WEB-desain diperlukan penciptaan alat serbaguna dan kompak pengolahan teks dengan jumlah minimum yang diperlukan untuk kode ini. Hal ini tidak terkecuali dan populer di kalangan pemula dan pengembang profesional bahasa PHP. Bahasa ekspresi reguler sebagai template teks untuk menyederhanakan tugas penanganan teks dan mengurangi kode untuk puluhan dan ratusan baris. Banyak masalah tidak dapat diselesaikan sama sekali tanpa itu.
Regular Expressions di PHP
bahasa PHP memiliki tiga mekanisme untuk bekerja dengan ekspresi reguler - «ereg», «mb_ereg» dan «preg». Yang paling umum adalah antarmuka «preg», yang fungsinya menyediakan akses ke perpustakaan PCRE dukungan ekspresi reguler, awalnya dikembangkan untuk bahasa Perl, yang termasuk dalam paket PHP. Preg-mencari fungsi dalam pencocokan teks string yang diberikan, menurut pola tertentu dalam bahasa ekspresi reguler.
Dasar-dasar sintaks
Sebagai bagian dari sebuah artikel pendek adalah mustahil untuk menjelaskan secara rinci seluruh sintaks ekspresi reguler, untuk ini ada literatur khusus. Kami hanya menyajikan unsur utama untuk menunjukkan peluang bagi pengembang dan memahami kode contoh.
Dalam PHP ekspresi reguler secara formal didefinisikan sangat sulit, dan karena itu menyederhanakan deskripsi. Sebuah kalimat biasa adalah string teks. Ini terdiri dari template pemisah yang berdedikasi dan pengubah menunjukkan cara untuk mengatasinya. Mungkin dimasukkan dalam berbagai alternatif dan pengulangan pola.
Misalnya, dalam ekspresi / \ d {3} - \ d {2} - \ d {2} / m pembagi adalah "/", diikuti dengan template, dan simbol «m» adalah modifikator.
Semua kekuatan ekspresi reguler yang dikodekan menggunakan meta-karakter. The metakarakter bahasa utama adalah backslash - "\". Ini perubahan jenis berikut karakter di seberang (mis. E. Dikonversi menjadi wildcard karakter biasa dan sebaliknya). metakarakter lain yang penting adalah garis lurus «|», menentukan template alternatif. lebih banyak contoh meta-karakter:
| ^ | Mulai objek atau string |
| ( | Mulai subpattern |
| ) | akhir subpattern |
| { | Mulai pembilang |
| } | akhir pembilang |
| \ d | digit desimal dari 0 sampai 9 |
| \ D | setiap karakter yang bukan angka |
| \ s | simbol kosong, ruang, tab, |
| \ w | simbol kamus |
PHP, pengolahan ekspresi reguler, ruang dianggap sebagai karakter yang valid terpisah, sehingga ekspresi XYZ dan ABC MANA berbeda.
sub pola
Dalam PHP sub pola teratur dengan tanda kurung, dan mereka kadang-kadang disebut "subexpressions". Melakukan fungsi sebagai berikut:
alternatif alokasi. Misalnya, pola panas (sesuatu | Burung |) bertepatan dengan kata-kata "panas", "Firebird" dan "panas". Dan tanpa tanda kurung itu hanya akan menjadi string kosong, "burung" dan "panas".
"Spektakuler" subpattern. Ini berarti bahwa jika pola cocok substring, kemudian kembali semua pertandingan. Untuk kejelasan, kami memberikan contoh. Mengingat ekspresi reguler berikut: pemenang menerima ((emas | berlapis emas) (medali | cup)) - dan string untuk pertandingan, "pemenang mendapatkan medali emas." Selain kalimat awal, hasil pencarian akan dikeluarkan: "Medali Emas", "medali", "emas".
Operator pengulangan (kvadrifikatory)
Dalam menyusun ekspresi reguler sering diperlukan untuk menganalisis pengulangan angka dan simbol. Ini bukan masalah, jika tidak banyak pengulangan. Tapi apa yang harus dilakukan ketika kita tidak tahu jumlah pasti mereka? Dalam hal ini perlu untuk menggunakan metakarakter khusus.
Untuk penjelasan pengulangan digunakan kvadrifikatory - metakarakter untuk menentukan nomor tersebut. Kvadrifikatory terdiri dari dua jenis:
- umum di kurung;
- berkurang.
Secara keseluruhan quantifier tersentuh dengan jumlah minimum dan maksimum elemen pengulangan diperbolehkan dalam bentuk dua angka di kawat gigi, seperti x {2,5}. Jika jumlah maksimum pengulangan tidak diketahui, argumen kedua tidak ditentukan: x {2}.
bilangan disingkat adalah simbol untuk yang paling umum dari pengulangan untuk menghindari sintaks overloading yang tidak perlu. Biasanya ada tiga luka:
1. * - nol atau lebih pengulangan, yang setara dengan {0,}.
2. + - satu atau lebih pengulangan, yaitu, {1} ...
3.? - nol atau hanya satu ulangi - {0,1}.
contoh regex
Bagi mereka yang belajar ekspresi reguler, contoh - buku teks terbaik. Kami memberikan beberapa yang menunjukkan peluang mereka dengan minimum usaha. Semua kode sepenuhnya kompatibel dengan versi PHP 4.x dan di atas. Untuk sepenuhnya memahami sintaks dan penggunaan semua fitur bahasa yang kita merekomendasikan buku oleh J .. Friedl, "ekspresi reguler", yang sepenuhnya dianggap sintaks, dan ada contoh kalimat biasa tidak hanya PHP, tetapi juga untuk Python, Perl, MySQL, Java, Ruby, dan C #.
Validasi E-mail
Tugas. Ada halaman Internet yang pengunjung diminta alamat email. ekspresi reguler harus memeriksa kebenaran dari alamat sebelum mengirim pesan. Periksa tidak menjamin bahwa kotak surat yang ditetapkan benar-benar ada dan menerima pesan. Tapi menyingkirkan alamat jelas salah itu bisa.
Keputusan. Seperti halnya bahasa pemrograman, PHP verifikasi email-address regex dapat diimplementasikan dengan cara yang berbeda, dan contoh-contoh dalam artikel ini adalah bukan pilihan akhir dan hanya. Oleh karena itu, dalam setiap kasus, kami akan memberikan daftar persyaratan yang perlu diperhitungkan ketika pemrograman dan implementasi khusus bergantung sepenuhnya pada pengembang.
Dengan demikian, ekspresi yang menguji email yang valid, harus memeriksa kondisi berikut:
- Kehadiran di awal yang melapisi simbol @, dan tidak ada kesenjangan.
- Bagian domain dari alamat simbol @, hanya karakter yang valid untuk nama domain. Hal yang sama berlaku untuk nama pengguna.
- Ketika memeriksa username diperlukan untuk menentukan adanya karakter khusus seperti tanda kutip atau garis vertikal. simbol tersebut berpotensi berbahaya dan dapat terkandung dalam jenis seperti serangan yang SQL injection. Hindari alamat.
- username memungkinkan hanya satu titik, yang mungkin bukan karakter pertama atau terakhir dalam string.
- Nama domain harus berisi setidaknya dua dan tidak lebih dari enam karakter.
Misalnya, dengan mempertimbangkan semua kondisi ini dapat dilihat pada gambar berikut.
Validasi URL
Tugas. Periksa apakah teks string yang ditentukan adalah valid URL alamat. Sekali lagi, kami mencatat bahwa ekspresi reguler URL pengecekan dapat diimplementasikan dalam berbagai cara.
Keputusan. Versi final kami adalah sebagai berikut:
/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6})([\/\w \ .-] *) * \ /? $ /
Sekarang menganalisis komponen-komponennya secara lebih rinci menggunakan gambar.
| klaim 1 | Sebelum URL tidak harus memiliki karakter apapun |
| klaim 2 | Memeriksa keberadaan awalan wajib «http» |
| Item 3 | Jangan sampai ada simbol |
| klaim 4 | Jika ada «s», URL poin untuk sambungan aman «https» |
| klaim 5 | porsi yang dibutuhkan dari "//" |
| klaim 6 | Tidak ada karakter |
| p. 7-9 | Memverifikasi domain tingkat pertama dan keberadaan titik |
| p.10-13 | Memverifikasi domain menulis tingkat kedua dan titik |
| p.14-17 |
URL struktur file - satu set angka, huruf, garis bawah, tanda hubung, titik, dan garis miring di akhir |
Periksa nomor kartu kredit
Tugas. Anda perlu untuk mengimplementasikan validasi nomor kartu kredit yang dimasukkan dari sistem pembayaran yang paling umum. Sebuah varian hanya untuk kartu Visa dan MasterCard.
Keputusan. Ketika membuat ekspresi Anda perlu memperhitungkan kemungkinan adanya kesenjangan di ruang masukan. Angka pada peta dibagi menjadi kelompok-kelompok untuk membaca lebih mudah dan dikte. Oleh karena itu, adalah wajar bahwa seseorang dapat mencoba untuk memasukkan nomor dengan cara ini (mis. E. Menggunakan spasi).
Tulis ekspresi universal yang memperhitungkan ruang mungkin atau tanda hubung, lebih rumit dari sekedar membuang semua karakter kecuali angka. Oleh karena itu, kami sarankan menggunakan ekspresi wildcard / D, yang menghilangkan semua karakter kecuali angka.
Sekarang Anda dapat pergi langsung ke nomor cek. Semua perusahaan, penerbit kartu kredit menggunakan format nomor unik. Dalam contoh itu digunakan, dan klien tidak perlu memasukkan nama perusahaan - itu ditentukan oleh nomor tersebut. kartu Visa selalu dimulai dengan angka 4 dan memiliki panjang 13 atau 16 digit. MasterCard dimulai di kisaran 51-55 dengan sejumlah panjang 16. Akibatnya, kita mendapatkan ekspresi berikut:
Sebelum pemrosesan order dapat lebih menguji digit terakhir dari nomor, yang dihitung pada algoritma Luhn.
Memverifikasi nomor telepon
Tugas. Memeriksa kebenaran nomor telepon masuk.
Keputusan. Jumlah digit di nomor telepon tetap dan bergerak bervariasi tergantung pada negara, sehingga universal periksa menggunakan ekspresi reguler, nomor telepon dengan benar mustahil. Tapi nomor internasional memiliki format yang ketat dan sempurna untuk memeriksa pola. Bahkan lebih sehingga semakin banyak operator telepon nasional berusaha untuk memenuhi standar yang sama. Struktur ruang adalah sebagai berikut:
+ CCC.NNNNNNNNNNxEEEE, di mana:
- C - adalah kode negara yang terdiri dari 1-3 digit.
- N - jumlah sampai dengan 14 digit.
- E - ekstensi opsional.
Plus merupakan unsur yang sangat diperlukan, dan tanda X hadir hanya bila diperlukan ekstensi.
Akibatnya kita memiliki ekspresi berikut:
^ \ + [0-9] {1,3 } \ [0-9] {4,14}. (:?. X +)? $
Angka-angka dalam kisaran
Tugas. Hal ini diperlukan untuk memastikan kebetulan integer kisaran tertentu. Selain itu, perlu untuk menemukan ekspresi reguler hanya angka dari jangkauan.
Keputusan. Berikut adalah beberapa ekspresi untuk beberapa kasus yang paling umum:
| Tentukan jam dari 1 sampai 24 | ^ (1 [0-2] | [1-9]) $ |
| Hari di bulan 1-31 | ^ (3 [01] | [12] [0-9] | [1-9]) $ |
| Detik atau menit 0-59 | ^ [1-5]? [0-9] $ |
| Sejumlah dari 1 sampai 100 | * (100 |? [1-9] [0-9]) $ |
| Hari tahun 1-366 | ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |? [1-9] [0-9]) $ |
Cari alamat IP
Tugas. Hal ini diperlukan untuk menentukan apakah suatu string adalah alamat IP yang valid dalam format IPv4 dalam kisaran 000.000.000.000-255.255.255.255.
Keputusan. Seperti halnya masalah dalam bahasa PHP, ekspresi reguler memiliki banyak varintov. Sebagai contoh, ini:
pengecekan secara online ekspresi
Periksa regex benar untuk pemula bisa sulit karena kompleksitas dari sintaks, yang berbeda dari bahasa pemrograman "biasa". Untuk mengatasi masalah ini, ada banyak penguji secara online ekspresi yang membuatnya mudah untuk memeriksa kebenaran dari template yang Anda buat dalam teks nyata. programmer memasuki ekspresi dan verifikasi data dan langsung melihat hasil dari pengolahan. Biasanya ada menyajikan bagian referensi, yang merinci ekspresi reguler, contoh dan perbedaan implementasi untuk bahasa yang paling diperpanjang.
Tetapi untuk layanan online penuh kepercayaan hasil tidak dianjurkan untuk semua pengembang yang menggunakan PHP. Sebuah kalimat biasa ditulis dan diverifikasi secara pribadi, menimbulkan kualifikasi dan menjamin tidak adanya kesalahan.
Similar articles
Trending Now