Senin, Januari 23, 2012

Quick Tip: Regex Match Entire String

(for Bahasa Indonesia, see below.)

This is the scenario:

All right, today i'm going to find out how to match a pattern within entire string with regex. What i mean is when i try to check a string, they must have exactly 1 numeric character in the beginning, and unlimited alpha character after. This is what i mean:

  • 0432 should return false
  • 0yep should return true
  • dada 0yep should return false
  • 0yep                                                      should return false
  •                     0yep should return false

so i use this regex:

preg_match('/[0-9][a-z]+/i');

Unfortunately, it also match the third, fourth, and five. After some research, i found there's ^ pattern that means "this pattern should beginning with..". So i changed it to

preg_match('/^[0-9][a-z]+/i');

and it doesn't match the third test case and the fifth case. Unfortunately, it still match the fourth. Again, after some research i found there's $ pattern that means "this pattern should end with..". So i change it to:

preg_match('/^[0-9][a-z]$+/i');

and everything work as expected.

Anggap ceritanya begini:

Saya sekarang sedang bermain dengan regex untuk verifikasi data. Sebelumnya Saya telah berkenalan dengan regex, tetapi makhluk yang satu ini sepertinya masih harus ditaklukkan dengan cara lain.

Jadi data yang ingin verifikasi ingin saya lakukan untuk keseluruhan string. Yang ingin Saya lakukan adalah: data yang masuk harus diawali dengan tepat 1 angka, kemudian selanjutnya harus diikuti dengan huruf, tidak peduli seberapa banyak jumlah hurufnya.

Yang saya lakukan awalnya adalah:

function check1($data) { return preg_match('/[0-9][a-z]+/i', $data); }

Kemudian coba saya cek

check1('0956') // false
check1('0') // false
check1('0mantap') // true

Terlihat berjalan sempurna? Ternyata saya lihat ada user jahil yang memasukkan data

check1('blah 0m a n t a p'); // true

Bagaimana ceritanya di depannya ada blah?

Ternyata, preg_match itu akan mengembalikan nilai true cukup apabila pattern-nya match di salah satu bagian, nyelip gak papa. Bagian yang saya garis bawahi merupakan bagian yang match.

Nah sekarang, Saya tidak ingin di depannya ada apa-apa. Sesuai dengan kesepakatan awal, angka yang diikuti dengan karakter tak terbatas.

Diawali dengan angka. Hm, setelah saya lihat-lihat, ada aturan ^ (beginning with). Jadi percobaan kedua:


function check2($data) { return preg_match('/^[0-9][a-z]+/i', $data); }

Kemudian coba saya cek

check2('0halo') // true
check2('0') // false
check2('blah 0mantap') // false

Terlihat berjalan sempurna? Ternyata ada yang jahil menambahkan spasi dan itu termasuk masalah yang tidak masalah!

check2('0m a n t a p'); // true
check2('0hayo loh kenapa'); // true
check2('0h                                                                          '); // true

Ternyata harus ditambah markah $ (this is the end). Artinya setelah huruf, tidak boleh ada apa-apa lagi.

function check3($data) { return preg_match('/^[0-9][a-z]+$/i', $data); }

dan semuanya berjalan sempurna! Alhamdulillah.

0 komentar:

Poskan Komentar

Silahkan memberikan komentar pada artikel ini. Dimohon untuk tidak mengirim komentar yang: anarkis, mengandung kata-kata kasar atau kotor, atau yang dapat menciptakan flame war