Saya pertama kali mencoba menyelesaikan ini menggunakan jQuery, tapi saya tidak senang dengan karakter yang tidak diinginkan (non-digit) benar-benar muncul di bidang input sesaat sebelum dihapus pada keyup.
Mencari solusi lain yang saya temukan ini:
Integer (non-negatif)
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
return oKeyEvent.charCode === 0 ||
/\d/.test(String.fromCharCode(oKeyEvent.charCode));
}
</script>
<form name="myForm">
<p>Enter numbers only: <input type="text" name="myInput"
onkeypress="return numbersOnly(this, event);"
onpaste="return false;" /></p>
</form>
Sumber: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Contoh
contoh langsung: http://jsfiddle.net/u8sZq/
Poin desimal (non-negatif)
Untuk memungkinkan satu titik desimal Anda dapat melakukan sesuatu seperti ini:
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
var s = String.fromCharCode(oKeyEvent.charCode);
var containsDecimalPoint = /\./.test(oToCheckField.value);
return oKeyEvent.charCode === 0 || /\d/.test(s) ||
/\./.test(s) && !containsDecimalPoint;
}
</script>
Sumber: Baru saja menulis ini. Tampaknya bekerja. Contoh langsung: http://jsfiddle.net/tjBsF/
Kustomisasi lainnya
- Untuk memungkinkan lebih banyak simbol diketik, tambahkan saja ke ekspresi reguler yang bertindak sebagai filter kode char dasar.
- Untuk menerapkan pembatasan kontekstual sederhana, lihat konten saat ini (keadaan) dari bidang input (oToCheckField.value)
Beberapa hal yang dapat Anda lakukan:
- Hanya satu angka desimal yang diizinkan
- Izinkan tanda minus hanya jika diposisikan di awal string. Ini akan memungkinkan angka negatif.
Kekurangan
- Posisi caret tidak tersedia di dalam fungsi. Ini sangat mengurangi batasan kontekstual yang dapat Anda terapkan (mis. Tidak ada dua simbol berurutan yang sama). Tidak yakin apa cara terbaik untuk mengaksesnya.
Saya tahu judulnya meminta solusi jQuery, tetapi mudah-mudahan seseorang akan menemukan ini berguna.