Ekspresi Validasi Data
Untuk melakukan validasi data, terlebih dahulu Anda harus membuat suatu ekspresi. Di mana ekspresi ini
terbentuk dari susunan pola-pola sesuai dengan sintaks dasar penulisan regex. Melalui ekspresi inilah
nantinya Anda dapat membandingkan, mengubah, mengganti, atau menghapus string. Regular expression
memungkinkan Anda untuk melakukan validasi data melalui ekspresi-ekspresi yang telah Anda tentukan
sebelumnya. Berdasarkan aturan yang ditetapkan, sebenarnya Anda juga dapat membuat pola yang lebih
kompleks. Secara umum, ada beberapa ekspresi yang cukup sering membantu kita di dalam menyelesaikan
persoalan validasi.
• Ekspresi karakter numerik
Karakter numerik dituliskan dengan menggunakan ekspresi [0-9] atau \d. Ekspresi ini memiliki arti sesuai
atau cocok dengan bilangan desimal tunggal antara 0 sampai 9.
• Ekspresi karakter non-numerik
Karakter non-numerik di sini diartikan sebagai semua karakter kecuali karakter angka. Cara penulisannya
cukup singkat, yaitu menggunakan ekspresi [^0-9] atau \D. Ingat kembali karakter ^ di dalam kurung siku
pada pembahasan sebelumnya, di mana memiliki arti semua karakter kecuali angka 0 sampai 9. Perhatikan
bahwa karakter ^ di dalam kurung siku bukan merupakan asersi seperti contoh kasus tahun.
• Ekspresi huruf kecil dan huruf besar
Huruf besar diekspresikan dengan karakter [A-Z], sedangkan ekspresi huruf kecil adalah [a-z]. Ekspresi ini
memiliki arti huruf antara a sampai dengan z, sehingga angka 0 sampai 9 tidak termasuk didalamnya. Jika
ingin mendapatkan huruf besar dan huruf kecil, Anda tinggal menggabungkannya menjadi [a-zA-Z].
• Ekspresi alamat IP
Sebagaimana Anda ketahui, alamat IP (Internet Protocol) versi 4 dituliskan seperti contoh berikut:
192.168.0.3. Ada pun untuk menyatakan alamat IP yang valid, kita menggunakan pola dalam ekspresi
regex berikut:
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Jika Anda perhatikan, ekspresi di atas mengandung tiga subpola yang dibatasi oleh tanda titik. Subpola
pertama adalah ekspresi \d{1,3}, artinya angka 0 sampai 9 dan paling sedikit 1 angka serta tidak boleh
lebih dari 3 angka. Tanda backslash digunakan untuk meloloskan tanda titik, sehingga didapatkan alamat
IP yang valid. Ada pun tiga subpola lainnya sama dengan subpola pertama, hanya saja subpola terakhir
tidak memerlukan tanda titik.
• Ekspresi alamat email
Alamat email secara umum dituliskan seperti contoh berikut: didik_rpl@yahoo.com. Dari sini Anda sudah
dapat merancang pola yang tepat, yakni terdiri dari tiga subpola.
^([\w-]+)@([\w-]+\.)+[A-Za-z]{2,3}$
Untuk mendapatkan pola yang tepat, kita mengawali dengan karakter ^ dan menutup dengan karakter $.
Berikutnya, subpola pertama menyatakan semua karakter diperbolehkan, dan dilanjutkan dengan karakter
@. Setelah itu meloloskan tanda titik untuk digunakan sebagai akhir nama domain. Terakhir adalah
penulisan TLD (Top Level Domain), di mana boleh dua tetapi tidak lebih dari 3 karakter.
Di dalam kelas Regex terdapat beberapa method static yang memungkinkan Anda untuk menggunakan
regular expression tanpa secara eksplisit menciptakan objek Regex. Artinya, kita tidak harus
menginstantiasi kelas Regex untuk menciptakan objek Regex, karena method static akan menciptakan
objek secara implisit.
Berdasarkan ekspresi-ekspresi di atas, Anda dapat melakukan validasi melalui pola yang telah Anda
definisikan. Untuk contoh kasus yang lebih lanjut, diharapkan masukan berupa tanggal dalam format
dd/mm/yyyy. Di mana tanggal tidak boleh lebih dari 31 dan bulan juga tidak boleh lebih dari 12.
Bagaimana cara menyelesaikannya? Perhatikan kode program berikut:
' Import namespace untuk kelas Regex
Imports System.Text.RegularExpressions
Public Class Form1
Inherits System.Windows.Forms.Form
Function IsValidDate(ByVal dt As String) As Boolean
' Tulis ekspresi dalam satu baris menyamping
' Mengembalikan True jika string sesuai dengan pola yang didefinisikan
Return (Regex.IsMatch(dt, _
"(^0[1-9]{1}|^[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)\d\d$"))
End Function
Private Sub Button1_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button1.Click
Dim tgl1, tgl2 As String
tgl1 = "30-06-2005"
tgl2 = "2005-07-25"
If IsValidDate(tgl1) Then
Label1.Text = tgl1 + " Valid Date"
Else
Label1.Text = tgl1 + " Not Valid Date"
End If
If IsValidDate(tgl2) Then
Label2.Text = tgl2 + " Valid Date"
Else
Label2.Text = tgl2 + " Not Valid Date"
End If
End Sub
End Class
Pada contoh di atas, kita tidak menciptakan objek Regex secara eksplisit, tetapi menggunakan method
IsMatch, yang juga merupakan method statik. Hasil dari kode program di atas pasti sudah dapat Anda
tebak, di mana string pertama merupakan penulisan format tanggal yang tepat, sedangkan string kedua
tidak sesuai dengan pola Anda.
Validasi dengan Regular Expression
Setelah cukup memahami dasar-dasar regular expression, kita akan melakukan implementasi dalam rangka
mendapatkan data yang sah. Untuk melengkapi validasi yang Anda buat, Anda juga dapat memanfaatkan
kontrol ErrorProvider.
Sekarang siapkan project baru, kemudian masukkan empat buah kontrol TextBox, sebuah kontrol
ErrorProvider, dan sebuah Button. Masing-masing textbox akan kita gunakan untuk masukan nama,
tanggal, email, dan alamat URL. Kode program selengkapnya yang digunakan adalah sebagai berikut:
Imports System.Text.RegularExpressions
Public Class Form1
Inherits System.Windows.Forms.Form
' Windows Form Designer generated code
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Focus()
' membatasi karakter tanggal
TextBox2.MaxLength = 10
End Sub
Private Sub TextBox1_Leave(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox1.Leave
If TextBox1.Text = "" Then
TextBox1.Focus()
End If
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If Not IsAlpha(TextBox1.Text) Then
ErrorProvider1.SetError(TextBox1, _
"Isi dengan Huruf A-Z atau a-z" & Chr(10) & _
"Satu kata saja ya.. ")
Else
ErrorProvider1.SetError(TextBox1, "")
End If
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox2.TextChanged
If Not IsValidDate(TextBox2.Text) Then
ErrorProvider1.SetError(TextBox2, _
"Isi dengan tgl-bln-th," & Chr(10) & _
"misal: 01/12/2005")
Else
ErrorProvider1.SetError(TextBox2, "")
End If
End Sub
Private Sub TextBox3_TextChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox3.TextChanged
If Not IsValidEmail(TextBox3.Text) Then
ErrorProvider1.SetError(TextBox3, _
"Alamat Email Tidak Valid")
Else
ErrorProvider1.SetError(TextBox3, "")
End If
End Sub
Private Sub TextBox4_TextChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox4.TextChanged
If Not IsValidURL(TextBox4.Text) Then
ErrorProvider1.SetError(TextBox4, _
"URL Tidak Valid")
Else
ErrorProvider1.SetError(TextBox4, "")
End If
End Sub
' Fungsi untuk memeriksa input huruf (satu kata)
' mengembalikan nilai True jika string sesuai
Function IsAlpha(ByVal str As String) As Boolean
Return (Regex.IsMatch(str, "^[A-Za-z]+$"))
End Function
' Fungsi untuk memeriksa format tanggal
Function IsValidDate(ByVal tgl As String) As Boolean
Return (Regex.IsMatch(tgl, _
"(^0[1-9]{1}|^[12][0-9]|3[01])[/](0[1-9]|1[012])[/](19|20)\d\d$"))
End Function
' Fungsi untuk memeriksa format alamat email
Function IsValidEmail(ByVal email As String) As Boolean
Return (Regex.IsMatch(email, "^([\w-]+)@([\w-]+\.)+[A-Za-z]{2,3}$"))
End Function
' Fungsi untuk memeriksa format URL
Function IsValidURL(ByVal url As String) As Boolean
Return (Regex.IsMatch(url, "http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"))
End Function
End Class
Pada validasi ini, Anda juga dapat menggunakan event-event TextBox lain yang mendukung, misalnya
Leave, KeyPress, atau lainnya. Ada pun di sini kita menggunakan event TextChanged, karena memiliki
waktu tanggap lebih cepat. Akibatnya ikon error juga akan lebih sering muncul, meskipun sebenarnya data
yang Anda masukkan belum selesai dituliskan.
Tidak ada komentar:
Posting Komentar