Pertama, mari kita lihat dua karakter khusus: '^' dan '$'. Keduanya digunakan untuk mencocokkan awal dan akhir string. Berikut contohnya:
"^The": mencocokkan karakter yang dimulai dengan "The" String
; of Despair$": cocok dengan string yang diakhiri dengan "of Despair";
"^abc$": cocok dengan string yang dimulai dengan abc dan diakhiri dengan abc, pada kenyataannya, hanya abc yang cocok dengan itu;
"notice": Cocok dengan string yang berisi pemberitahuan;
Anda Dapat dilihat bahwa jika Anda tidak menggunakan dua karakter yang kami sebutkan (contoh terakhir), itu berarti pola (ekspresi reguler) dapat muncul di mana saja dalam string yang sedang diperiksa, dan Anda tidak menggunakannya Kunci ke samping.
Ada juga beberapa karakter '*', '+', dan '?', yang digunakan untuk mewakili jumlah atau urutan kemunculan suatu karakter. Masing-masing mewakili: "nol atau lebih", "satu atau lebih", dan " nol atau satu." Berikut beberapa contohnya:
"ab*": Mencocokkan string yang terdiri dari a dan nol atau lebih b ("a", "ab", "abbb", dll.);
"ab+" : Sama seperti di atas, tetapi dengan setidaknya satu b ("ab", "abbb", dll.);
"ab?": cocok dengan 0 atau satu b;
"a?b+$": cocok dengan satu atau 0 a diikuti dengan Tambahkan lebih dari satu string yang diakhiri dengan b.
Anda juga dapat membatasi jumlah karakter yang muncul dalam tanda kurung kurawal, seperti
"ab{2}": cocok dengan a diikuti oleh dua b (tidak kurang) ("abb ")
; ": setidaknya dua b("abb", "abbbb", dll.);
"ab{3,5}": 2-5 b("abbb", "abbbb ", atau "abbbbb").
Anda juga harus perhatikan bahwa Anda harus selalu menentukan (yaitu, "{0,2}", bukan "{,2}"). Demikian pula, Anda harus mencatat bahwa, '*', ' +', dan '?' mengikuti tiga anotasi rentang, masing-masing "{0,}", "{1,}", dan "{0,1}".
Sekarang masukkan sejumlah karakter ke dalam tanda kurung, misalnya:
"a(bc)*": cocok dengan a diikuti dengan 0 atau satu "bc";
"a(bc){1,5}": satu banding 5 "bc. "
juga memiliki karakter '│', yang setara dengan operasi OR:
"hi│hello": cocok dengan string yang berisi "hi" atau "hello";
"(b│cd)ef": cocok dengan string yang berisi "bef" Atau string "cdef";
"(a│b)*c": Cocok dengan string yang berisi - beberapa (termasuk 0) a atau b, diikuti dengan string c
;
"a.[0-9]": an a diikuti dengan karakter diikuti dengan angka (string yang berisi string tersebut akan dicocokkan, dan tanda kurung ini akan dihilangkan di masa mendatang)
"^.{ 3}$": berakhir dengan tiga karakter. Konten yang diapit tanda kurung siku hanya cocok dengan satu karakter.
"[ab]": cocok dengan satu karakter a atau b (sama seperti "a│b");
"[ad]" : Cocok dengan satu karakter dari ' a' hingga 'd' (efek yang sama seperti "a│b│c│d" dan "[abcd]");
"^[a-zA-Z]": Mencocokkan karakter yang dimulai dengan huruf String
"[0-9 ]%": Mencocokkan string yang mengandung x%
, "[a-zA-Z0-9]$": Mencocokkan string yang diakhiri dengan koma diikuti dengan angka atau huruf.
Anda juga dapat memasukkan karakter yang tidak Anda inginkan ke dalam tanda kurung siku
. Anda hanyaperlu
menggunakan '^' sebagai awal braket (yaitu, "%[^a-zA-Z]%" cocok dengan dua tanda persen dengan satu di dalamnya. string non-huruf).
menafsirkan, tetapi ketika "^.[$()│*+?{" digunakan sebagai karakter dengan arti khusus, Anda harus menambahkan '' di depan karakter ini, dan di php3 Anda harus menghindari penggunaan di awal polanya, misalnya, ekspresi reguler "($│?[0-9]+" harus dipanggil ereg("( \$│?[0-9 ]+", $str) (saya tidak). tahu apakah itu sama di php4)
Jangan lupa bahwa karakter di dalam tanda kurung siku merupakan pengecualian terhadap aturan ini - di dalam tanda kurung siku, semua karakter khusus, termasuk (''), akan kehilangan properti khususnya (yaitu, "[* +?{}.]" cocok dengan string yang berisi karakter-karakter ini). Juga, seperti yang diberitahukan oleh manual regx kepada kita: "Jika daftar berisi ']', yang terbaik adalah menggunakannya sebagai karakter pertama dalam daftar karakter A (boleh ikuti '^'). Jika mengandung '-', yang terbaik adalah meletakkannya di awal atau akhir, atau atau di titik akhir kedua dari suatu rentang (yaitu [ad-0-9] Tanda '-' di dalam. tengah akan valid.
Demi kelengkapan, saya harus membahas penyusunan urutan, kelas karakter, dan kelas kesetaraan. Namun saya tidak ingin membahas terlalu banyak detail dalam aspek-aspek ini, dan ini tidak perlu dibahas dalam artikel berikut. Informasi lebih lanjut dapat ditemukan di halaman manual regex.
Cara membuat pola untuk mencocokkan input jumlah mata uang
. Sekarang kita akan menggunakan apa yang telah kita pelajari untuk melakukan sesuatu yang berguna: membuat pola yang cocok untuk memeriksa apakah informasi masukannya adalah angka yang mewakili uang. Kami pikir ada empat cara untuk mewakili jumlah uang: "10000.00" dan "10,000.00", atau tanpa bagian desimal, "10000" dan "10,000"
. 0 -9]*$
Artinya semua variabel harus dimulai dengan angka selain 0. Namun ini juga berarti bahwa satu "0" tidak dapat lulus pengujian. Berikut solusinya:
^(0│[1-9] [0- 9]*)$
"Hanya 0 dan angka yang dimulai dengan 0 yang cocok", kita juga dapat mengizinkan tanda negatif sebelum angka:
^(0│-?[1-9][0-9]*)$
Ini adalah: "0 atau angka yang dimulai dengan 0 yang mungkin mempunyai tanda negatif di depannya." Oke, oke sekarang mari kita kurang ketat dan izinkan dimulai dengan 0. Sekarang mari kita hilangkan tanda negatifnya, karena kita mewakili koin Di sana tidak perlu menggunakannya. Sekarang kita tentukan pola untuk mencocokkan bagian desimal:
^[0-9]+(.[0-9]+)?$
Ini menyiratkan bahwa string yang cocok harus dimulai dengan setidaknya satu bahasa Arab. digit . Namun perhatikan bahwa "10." tidak cocok dengan pola di atas, hanya "10" dan "10.2" yang bisa (Tahukah Anda alasannya)
^[0-9]+(.[0-9]{ 2 })?$
Kami telah menetapkan di atas bahwa harus ada dua tempat desimal setelah koma desimal. Jika menurut Anda ini terlalu kasar, Anda dapat mengubahnya menjadi:
^[0-9]+(.[0-9]{1. ,2})? $
Ini akan mengizinkan satu atau dua karakter setelah koma desimal agar mudah dibaca (setiap digit ketiga), kita dapat merepresentasikannya seperti ini:
^[0-9]{1,3}( ,[ 0-9]{3})*(.[0-9]{1,2})?$
Jangan lupa tanda plus '+' yang bisa diganti dengan tanda perkalian '*' jika Anda ingin mengizinkan string kosong untuk dimasukkan (Mengapa?). Juga jangan lupa bahwa garis miring terbalik '' dapat menyebabkan kesalahan dalam string PHP (kesalahan yang sangat umum). koma str_replace(" ,, "", $money) Kemudian perlakukan tipe tersebut sebagai ganda dan kita dapat melakukan perhitungan matematis melaluinya.
Membuat ekspresi reguler untuk memeriksa email
Mari kita lanjutkan membahas cara memverifikasi alamat email secara lengkap alamat email Ada tiga bagian di: Nama pengguna POP3 (semuanya di sebelah kiri '@' ), '@' , nama server (itu bagian yang tersisa). Nama pengguna dapat berisi huruf besar dan kecil, angka Arab, titik ('. '), minus ('-'), dan garis bawah ('_'). Nama server juga mengikuti aturan ini, kecuali untuk garis bawah.
Sekarang, nama pengguna tidak dapat diawali atau diakhiri dengan titik. Tidak ada dua. Harus ada setidaknya satu karakter di antara titik yang berurutan. Sekarang mari kita lihat cara menulis pola yang cocok untuk nama pengguna:
^[_a-zA-Z0-9-]+$
Keberadaan titik adalah belum diizinkan. Mari kita tambahkan:
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
Arti di atas: "Mulai dengan setidaknya satu karakter kanonik (kecuali .accidental) , diikuti dengan 0 atau lebih string yang dimulai dengan titik. "
Untuk menyederhanakannya, kita dapat menggunakan eregi() sebagai ganti ereg(). eregi() tidak membedakan huruf besar-kecil, jadi kita tidak perlu menentukannya dua rentang" az " dan "AZ" - Anda hanya perlu menentukan satu:
^[_a-z0-9-]+(.[_a-z0-9-]+)*$
Nama server setelahnya sama , tetapi garis bawah harus dihilangkan :
^[a-z0-9-]+(.[a-z0-9-]+)*$
Selesai. Sekarang cukup gunakan "@" untuk menghubungkan kedua bagian:
^[_a -z0-9-]+ (.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
Ini lengkapnya mode pencocokan otentikasi email, hanya perlu memanggil
eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[ a-z0-9-] +)*$ ',$eamil)
untuk mengetahui apakah itu email.
Kegunaan lain dari ekspresi reguler
untuk mengekstrak string
ereg() dan ereg() memiliki fitur yang memungkinkan pengguna mengekstrak bagian dari string melalui ekspresi reguler (Anda dapat membaca manual untuk penggunaan tertentu). string dari jalur/URL Ekstrak nama file – kode berikut adalah yang Anda perlukan:
ereg("([^\/]*)$", $pathOrUrl, $regs);
echo $regs[1];
Substitusi tingkat lanjut
ereg_replace() dan ereg_replace() juga sangat berguna: Jika kita ingin mengganti semua tanda negatif yang dipisahkan dengan koma:
ereg_replace("[ nrt]+" , "," , potong($str));