Siang tadi, salah satu member saya
(mbak Laksmi) sedang dilanda kebingungan. Sistem atau aplikasi yang dia
buat akan mengalami error bila input yang diterima oleh script dari
sebuah form diisi dengan data yang bukan berupa angka. Oleh karena itu,
dia ingin bagaimana cara melakukan validasi input
supaya menolak proses submit bila ada komponen input form yang diisi
value yang bukan berupa angka. Dengan kata lain… proses submit akan
dilakukan jika value yang dimasukkan benar-benar berupa angka.
OK.. mbak Laksmi, ini dia artikel yang akan membahas hal tersebut.
Mudah-mudahan bisa menjadi solusi. Kalaupun belum menjadi solusi
sepenuhnya, silakan dikembangkan sendiri ya. Saya hanya ngasih ide dan
cara dasarnya alias kailnya saja, sedangkan ikannya silakan dicari
sendiri ya
Memang agak sulit untuk memvalidasi value
yang diinputkan ke form apakah dia termasuk angka/bilangan atau bukan
oleh Javascript. Hal ini dikarenakan semua value akan dianggap sebagai
suatu string oleh Javascript. Oleh karena itu kita pakai cara lain untuk
memvalidasinya.
Ide dasar untuk memvalidasi suatu string input berupa angka atau bukan
adalah dengan mengecek satu demi satu karakter atau digitnya. Tentu
kita tahu bahwa value input berupa angka atau numerik jika setiap digit
karakternya terdiri dari angka-angka 0, 1, 2, …, 9. Dengan kata lain,
jika string itu memuat karakter selain angka-angka itu berarti dia bukan
angka sepenuhnya.
Contoh:
string 12345 : berupa angka
string 1234a34 : bukan berupa angka (karena memuat huruf ‘a’)
string 123-182p : bukan berupa angka (karena memuat ‘-’ dan ‘p’)
Nah… sekarang kita akan menerapkan ide tersebut untuk memvalidasi input apakah dia termasuk angka atau bukan.
Trus.. caranya mengimplementasikan bagaimana? Seperti yang telah saya
sampaikan di atas, kita akan mengecek satu demi satu karakternya.
Langkah pertama, kita berhusnuzon dulu pada stringnya bahwa dia termasuk angka, di sini kita set status = true
(status = true maksudnya string tsb merupakan angka). Lalu kita mulai
bekerja untuk setiap digit karakternya. Apabila karakternya termasuk
karakter 0 s/d 9, maka kita beri nilai karakternya TRUE, sedangkan bila
tidak termasuk karakter 0 s/d 9 maka kita beri nilai karakternya FALSE.
Nilai karakter ini selanjutnya kita kenakan operasi AND dengan status
menjadi status yang baru
1.
status = status AND nilaikarakter;
OK… sebagai contoh misalkan kita punya string ’13a56′.
Pertama status kita set TRUE terlebih dahulu.
1.
status = true;
1.
status = status AND true = true AND true = true;
1.
status = status AND true = true AND true = true;
1.
status = status AND false = true AND false = false;
1.
status = status AND true = fakse AND true = false;
1.
status = status AND true = false AND true = false;
Nah sekarang kita terapkan ide ini ke Javascript. Untuk membuat daftar karakter 0 s/d 9 kita buat array berisi karakter ’0′ s/d ’9′.
Ini dia scriptnya untuk memvalidasi input berupa angka.
01.
<
html
>
02.
<
head
>
03.
<
script
type
=
"text/javascript"
>
04.
05.
function cekNumerik()
06.
{
07.
// membaca nilai dari input form (komponen bernama 'data'), dan disimpan sebagai x
08.
var x = document.form1.data.value;
09.
10.
// membuat daftar karakter '0' s/d '9' dalam array
11.
var list = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
12.
13.
// nilai awal status
14.
var status = true;
15.
16.
// proses pengecekan setiap karakter dalam string
17.
// looping dilakukan sebanyak jumlah karakter dalam string
18.
for (i=0; i<=x.length-1; i++)
19.
{
20.
// jika karakter ke-i termasuk dalam array, maka nilainya TRUE
21.
// sedang jika tidak, nilai FALSE
22.
if (x[i] in list) cek = true;
23.
else cek = false;
24.
25.
// kenakan operasi AND
26.
status = status && cek;
27.
}
28.
29.
if (status == false)
30.
{
31.
// jika status akhir bernilai FALSE maka munculkan kotak peringatan
32.
// dan akan mengembalikan nilai FALSE
33.
34.
alert("Bukan angka");
35.
return false;
36.
}
37.
else
38.
{
39.
// sedang jika nilai status akhir TRUE, maka akan mengembalikan nilai TRUE
40.
return true;
41.
}
42.
}
43.
44.
script
>
45.
head
>
46.
<
body
>
47.
48.
<
form
name
=
"form1"
method
=
"post"
onsubmit
=
"return cekNumerik()"
action
=
"scriptAnda"
>
49.
Input <
input
type
=
"text"
name
=
"data"
> <
input
type
=
"submit"
name
=
"submit"
value
=
"Submit"
>
50.
form
>
51.
52.
body
>
53.
html
>
Perhatikan bagian tag HTML pada form di atas. Di situ terdapat event onsubmit="return cekNumerik()"
.
Event tersebut akan dijalankan ketika user mengklik tombol submit.
Proses submit akan diteruskan ke bagian action ‘scriptAnda’ jika nilai cekNumerik()
yang berasal dari javascript bernilai TRUE (input string nya berupa angka). Sedangkan bila nilai cekNumerik()
bernilai FALSE (inputnya bukan angka) maka akan muncul pesan alert dan proses submit tidak akan dilanjutkan ke ‘scriptAnda’.
Begitu mbak laksmi, mudah-mudahan bisa memahaminya ya…. Mudah-mudahan pula bisa bermanfaat bagi pengunjung blog yang lain.
Update:
Maaf bagi para pengguna IE, mohon untuk baris
1.
var
x = document.form1.data.value;
diganti dengan
1.
var
x = document.form1.data.value.split(
""
);
Hal ini dikarenakan membaca karakter demi karakter dari stringnya
tidak bisa dilakukan di IE dengan cara pertama di atas. Terpaksa harus
dipecah dulu dengan
split("");
Hmmm… aneh benar nih IE
EmoticonEmoticon