KomputerPengaturcaraan

PHP (regex) - apakah ia? Contoh dan check-ungkapan biasa

Apabila bekerja dengan teks dalam mana-mana bahasa pengaturcaraan moden, pemaju sentiasa bertemu dengan objektif pengesahan input bagi pematuhan dengan corak yang dikehendaki, mencari dan menggantikan serpihan ujian dan lain-lain jenis operasi pemprosesan maklumat watak. Membangunkan algoritma pengesahan anda sendiri membawa kepada kehilangan masa, keserasian kod dan kerumitan dalam pembangunan dan pemodenan itu.

Perkembangan pesat Internet dan WEB-reka bentuk bahasa memerlukan penciptaan cara serba boleh dan padat pemprosesan teks dengan jumlah yang minimum yang diperlukan untuk kod ini. Ia tidak terkecuali dan popular di kalangan pemula dan pemaju profesional bahasa PHP. Bahasa ungkapan biasa sebagai templat teks untuk memudahkan tugas mengendalikan teks dan mengurangkan kod untuk berpuluh-puluh dan beratus-ratus baris. Banyak masalah yang tidak boleh diselesaikan di semua tanpanya.

Ungkapan-ungkapan yang tetap dalam PHP

bahasa PHP mempunyai tiga mekanisme untuk bekerja dengan ungkapan biasa - «ereg», «mb_ereg» dan «preg». Yang paling biasa adalah antara muka «preg», yang fungsinya menyediakan akses kepada perpustakaan daripada PCRE sokongan ungkapan biasa, pada asalnya dibangunkan untuk bahasa Perl, yang termasuk dalam pakej PHP. Preg-mencari fungsi dalam yang sepadan rentetan teks yang diberikan, mengikut corak tertentu dalam bahasa ungkapan biasa.

Asas sintaks

Sebagai sebahagian daripada artikel yang singkat ia adalah mustahil untuk menerangkan secara terperinci keseluruhan ungkapan sintaks biasa, untuk ini terdapat sastera khas. Kami hadir hanya unsur-unsur utama untuk menunjukkan peluang untuk pemaju dan memahami contoh kod.

Dalam PHP ungkapan biasa secara rasmi ditakrifkan sangat sukar, dan oleh itu memudahkan keterangan. Ungkapan nalar adalah rentetan teks. Ia terdiri daripada template pemisah berdedikasi dan pengubahsuai yang menunjukkan cara untuk mengendalikan. kemasukan mungkin dalam pelbagai alternatif dan ulangan corak.

Sebagai contoh, dalam ungkapan / \ d {3} - \ d {2} - \ d {2} / m pembahagi adalah "/", diikuti dengan template, dan simbol «m» adalah pengubah suai.

Semua kuasa ungkapan biasa dikodkan menggunakan meta-aksara. The metacharacter bahasa utama adalah garis condong - "\". Ia mengubah jenis berikut aksara di sebaliknya (iaitu. E. Diubah menjadi satu wildcard watak biasa dan sebaliknya). Satu lagi metacharacter penting ialah garis lurus «|», menetapkan template alternatif. Lagi contoh meta-watak:

^ Mula objek atau rentetan
( mula subpattern
) akhir subpattern
{ Mula pengkuantiti
} akhir pengkuantiti
\ d digit perpuluhan 0-9
\ D mana-mana watak yang bukan nombor
\ s simbol kosong, ruang, tab,
\ w kamus simbol

PHP, memproses ungkapan biasa, ruang dianggap sebagai watak sah yang berasingan, jadi ungkapan XYZ dan ABC MANA adalah berbeza.

subpatterns

Dalam PHP subpatterns biasa dengan kurungan, dan mereka kadang-kadang dipanggil "subexpressions". Melaksanakan fungsi yang berikut:

  1. alternatif peruntukan. Sebagai contoh, corak haba (sesuatu | Bird |) bertepatan dengan kata-kata "panas", "Firebird" dan "panas". Dan tanpa kurungan ia hanya akan menjadi rentetan kosong, "burung" dan "panas".

  2. "Spectacular" subpattern. Ini bermakna bahawa jika corak dipadankan subrentetan, kemudian mengembalikan semua perlawanan. Untuk kejelasan, kami memberi contoh. Memandangkan ungkapan biasa berikut: pemenang menerima ((emas | bersalut emas) (pingat | cawan)) - dan tali untuk perlawanan, "pemenang mendapat pingat emas." Selain frasa awal, hasil carian akan dikeluarkan: "Pingat Emas", "pingat", "emas".

Pengendali ulangan (kvadrifikatory)

Dalam menyusun ungkapan biasa adalah perlu untuk menganalisis pengulangan nombor dan simbol. Ini bukan satu masalah, jika tidak banyak ulangan. Tetapi apa yang perlu dilakukan apabila kita tidak mengetahui bilangan sebenar mereka? Dalam kes ini ia adalah perlu untuk menggunakan Metaaksara khas.

Untuk penerangan ulangan digunakan kvadrifikatory - Metaaksara untuk menentukan bilangan. Kvadrifikatory terdiri daripada dua jenis:

  • biasa dalam kurungan;
  • dikurangkan.

pengkuantiti keseluruhan menyentuh dengan jumlah minimum dan maksimum dibenarkan ulangan unsur dalam bentuk dua nombor dalam penyokong gigi, seperti x {2,5}. Jika bilangan maksimum ulangan tidak diketahui, argumen kedua tidak dinyatakan: x {2}.

pengkuantiti singkatan adalah simbol untuk yang paling biasa ulangan untuk mengelakkan yang tidak perlu muatan sintaksis. Biasanya terdapat tiga luka:

1. * - sifar atau lebih ulangan, yang bersamaan dengan {0,}.

2. + - satu atau lebih ulangan, iaitu, {1} ...

3.? - sifar atau hanya satu ulangan - {0,1}.

contoh regex

Bagi mereka yang belajar ungkapan biasa, contoh - buku teks terbaik. Kami memberi anda beberapa yang menunjukkan peluang-peluang mereka dengan sekurang-kurangnya usaha. Semua kod adalah serasi sepenuhnya dengan versi 4.x PHP dan ke atas. Untuk memahami sepenuhnya sintaks dan penggunaan semua ciri bahasa kami mencadangkan buku oleh J .. Friedl, "ungkapan biasa", yang dianggap sepenuhnya sintaks dan terdapat contoh-contoh ungkapan biasa bukan sahaja PHP, tetapi juga untuk Python, Perl, MySQL, Java, Ruby, dan C #.

Pengesahan E-mel

Tugas. Terdapat halaman Internet di mana pengunjung diminta alamat e-mel. Ungkapan biasa mesti memeriksa ketepatan alamat sebelum menghantar mesej. Daftar tidak menjamin bahawa peti mel yang dinyatakan benar-benar wujud dan menerima mesej. Tetapi mengelakkan alamat jelas salah ia boleh.

Keputusan. Seperti mana-mana bahasa pengaturcaraan, dalam PHP pengesahan e-mel-alamat regex boleh dilaksanakan dalam cara yang berbeza, dan contoh-contoh dalam artikel ini tidak adalah pilihan terakhir dan hanya. Oleh itu, dalam setiap kes, kita akan menyediakan satu senarai keperluan yang perlu diambil kira apabila pengaturcaraan dan pelaksanaan tertentu bergantung sepenuhnya kepada pemaju.

Oleh itu, ungkapan yang menguji e-mel yang sah, perlu menyemak syarat-syarat berikut:

  1. Kehadiran di permulaan beratur @ simbol, dan tidak ada jurang.
  2. Domain sebahagian daripada alamat simbol @, mengandungi hanya aksara yang sah untuk nama domain. Begitu juga dengan nama pengguna.
  3. Apabila memeriksa nama pengguna adalah perlu untuk menentukan kehadiran watak-watak khas seperti koma atas atau baris menegak. simbol itu adalah berbahaya dan mungkin terkandung dalam jenis apa-apa serangan yang SQL suntikan. Mengelakkan alamat.
  4. nama pengguna membenarkan hanya satu mata, yang mungkin tidak menjadi watak pertama atau terakhir dalam rentetan.
  5. Nama domain mesti mengandungi sekurang-kurangnya dua dan tidak lebih daripada enam aksara.

Sebagai contoh, dengan mengambil kira semua syarat-syarat ini boleh dilihat dalam rajah berikut.

Pengesahan URL

Tugas. Memeriksa sama ada rentetan teks yang dinyatakan adalah sah URL address. Sekali lagi, kita perhatikan bahawa ungkapan biasa URL semakan boleh dilaksanakan dalam pelbagai cara.

Keputusan. Versi akhir kami adalah seperti berikut:

/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6})([\/\w \ .-] *) * \ /? $ /

Kini menganalisis komponennya dengan lebih terperinci menggunakan lukisan.

tuntutan 1 Sebelum URL tidak perlu mempunyai sebarang aksara
tuntutan 2 Semak kehadiran awalan mandatori «http»
item 3 Mesti ada simbol
tuntutan 4 Jika terdapat «s», mata URL untuk sambungan yang selamat «https»
tuntutan 5 bahagian yang diperlukan daripada "//"
tuntutan 6 tiada aksara
p. 7-9 Mengesahkan domain peringkat pertama dan kehadiran titik
p.10-13 Mengesahkan domain menulis peringkat kedua dan titik
p.14-17

struktur fail URL - satu set nombor, huruf, garis bawah, sengkang, titik, dan tanda palang pada akhir

Memeriksa nombor kad kredit

Tugas. Anda perlu untuk melaksanakan pengesahan nombor kad kredit memasuki sistem pembayaran yang paling biasa. A varian hanya untuk kad Visa dan MasterCard.

Keputusan. Apabila mencipta ungkapan yang anda perlu mengambil kira kemungkinan kehadiran jurang di ruang input. Angka pada peta dibahagikan kepada kumpulan untuk bacaan lebih mudah dan imlak. Oleh itu, ia adalah semulajadi bahawa seseorang boleh cuba untuk memasukkan nombor dengan cara ini (iaitu. E. Menggunakan ruang).

Tuliskan persamaan universal yang mengambil kira ruang yang mungkin atau tanda sempang, adalah lebih rumit daripada hanya membuang semua aksara kecuali digit. Oleh itu, kami mencadangkan menggunakan ungkapan / D wildcard yang mengalih keluar semua aksara kecuali digit.

Sekarang anda boleh pergi terus ke nombor cek. Semua syarikat, pengeluar kad kredit menggunakan format nombor yang unik. Dalam contoh ia digunakan, dan pelanggan tidak perlu memasukkan nama syarikat itu - ia ditentukan oleh nombor. kad Visa sentiasa bermula dengan nombor 4 dan mempunyai panjang 13 atau 16 digit. MasterCard bermula dalam lingkungan 51-55 dengan nombor yang panjang 16. Hasilnya, kita akan mendapat ungkapan berikut:

Sebelum memproses perintah itu boleh diuji lagi digit terakhir nombor, yang dikira pada algoritma Luhn itu.

Nombor telefon mengesahkan

Tugas. Memeriksa ketepatan nombor telefon yang dimasukkan.

Keputusan. Bilangan digit dalam nombor telefon tetap dan mudah alih berbeza bergantung kepada negara ini, begitu universal cek menggunakan ungkapan biasa, nombor telefon dengan betul mustahil. Tetapi nombor antarabangsa mempunyai format yang ketat dan sempurna untuk memeriksa corak. Lebih-lebih lagi bahawa lebih ramai operator telefon kebangsaan cuba memenuhi standard yang sama. struktur bilik adalah seperti berikut:

+ CCC.NNNNNNNNNNxEEEE, di mana:

- C - adalah kod negara yang terdiri daripada 1-3 digit.

- N - bilangan sehingga 14 digit.

- E - sambungan pilihan.

Plus adalah elemen yang sangat diperlukan, dan tanda X hadir hanya apabila diperlukan lanjutan.

Akibatnya kita mempunyai ungkapan berikut:

^ \ + [0-9] {1,3 } \ [0-9] {4,14}. (:?. X +)? $

Nombor dalam julat

Tugas. Ia adalah perlu untuk memastikan kebetulan integer julat tertentu. Di samping itu, ia adalah perlu untuk mencari ungkapan biasa sahaja nombor dari julat.

Keputusan. Berikut adalah ungkapan beberapa untuk beberapa kes yang paling biasa:

Menentukan jam 1-24 ^ (1 [0-2] | [1-9]) $
Hari dalam bulan 1-31 ^ (3 [01] | [12] [0-9] | [1-9]) $
Saat atau minit 0-59 ^ [1-5]? [0-9] $
Sebilangan dari 1 hingga 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]) $

Carian IP-alamat

Tugas. Ia adalah perlu untuk menentukan sama ada rentetan tertentu ialah IP-alamat yang sah dalam format IPv4 dalam julat dari 000.000.000.000-255.255.255.255.

Keputusan. Seperti mana-mana masalah dalam bahasa PHP, ungkapan biasa mempunyai banyak varintov. Sebagai contoh, ini:

penyemakan dalam talian ungkapan

Semak regex betul untuk pemula boleh menjadi sukar kerana kerumitan sintaks, yang berbeza daripada "biasa" bahasa pengaturcaraan. Untuk menyelesaikan masalah ini, terdapat banyak penguji talian ungkapan yang menjadikan ia mudah untuk memeriksa ketepatan template yang anda buat dalam teks sebenar. programmer memasuki bersuara dan pengesahan data dan serta-merta melihat hasil daripada pemprosesan. Biasanya terdapat membentangkan bahagian rujukan, yang memperincikan ungkapan biasa, contoh dan perbezaan pelaksanaan bagi bahasa yang paling panjang.

Tetapi untuk perkhidmatan dalam talian kepercayaan sepenuhnya keputusan tidak disyorkan untuk semua pemaju yang menggunakan PHP. Ungkapan nalar ditulis dan disahkan secara peribadi, menimbulkan kelayakan dan menjamin ketiadaan kesilapan.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ms.unansea.com. Theme powered by WordPress.