Saya perlu memastikan bahwa <input>
bidang tertentu hanya menerima angka sebagai nilai. Masukan bukan bagian dari formulir. Karenanya itu tidak dapat dikirim, jadi memvalidasi selama pengiriman bukanlah suatu pilihan. Saya ingin pengguna tidak dapat mengetikkan karakter apa pun selain angka.
Adakah cara yang tepat untuk mencapai ini?
html
input
numbers
validating
Chiel ten Brinke
sumber
sumber
Jawaban:
HTML 5
Anda dapat menggunakan nomor jenis masukan HTML5 untuk membatasi hanya entri nomor:
<input type="number" name="someid" />
Ini hanya akan berfungsi di browser keluhan HTML5. Pastikan doctype dokumen html Anda adalah:
<!DOCTYPE html>
Lihat juga https://github.com/jonstipe/number-polyfill untuk dukungan transparan di browser lama.
JavaScript
Pembaruan: Ada solusi baru dan sangat sederhana untuk ini:
Lihat jawaban ini atau coba sendiri di JSFiddle .
Untuk tujuan umum, Anda dapat memiliki validasi JS seperti di bawah ini:
function isNumberKey(evt){ var charCode = (evt.which) ? evt.which : evt.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } <input name="someid" type="number" onkeypress="return isNumberKey(event)"/>
Jika Anda ingin mengizinkan desimal, ganti "jika kondisi" dengan ini:
if (charCode > 31 && (charCode != 46 &&(charCode < 48 || charCode > 57)))
Sumber: Input teks HTML hanya mengizinkan input numerik
Demo JSFiddle: http://jsfiddle.net/viralpatel/nSjy7/
sumber
var charCode = (evt.which) ? evt.which : evt.keyCode;
Anda juga dapat menggunakan atribut pola di html5:
<input type="text" name="name" pattern="[0-9]" title="Title" />
Tutorial validasi masukan
Meskipun, jika doctype Anda tidak,
html
saya pikir Anda perlu menggunakan beberapa javascript / jquery.sumber
Kode Cepat dan Mudah
<input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || (event.charCode >= 48 && event.charCode <= 57))" />
Ini akan mengizinkan penggunaan angka dan backspace saja.
Jika Anda membutuhkan bagian desimal juga, gunakan fragmen kode ini
<input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || ( event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)))" />
sumber
Silakan coba kode ini bersama dengan bidang masukan itu sendiri
<input type="text" name="price" id="price_per_ticket" class="calculator-input" onkeypress="return event.charCode >= 48 && event.charCode <= 57"></div>
itu akan bekerja dengan baik.
sumber
Anda bisa menggunakan
<input type="number" />
. Ini hanya akan memungkinkan nomor untuk dimasukkan ke dalam kotak masukan lainnya.Contoh: http://jsfiddle.net/SPqY3/
Harap dicatat bahwa
type="number"
tag input hanya didukung di browser yang lebih baru.Untuk firefox, Anda dapat memvalidasi input dengan menggunakan javascript:
http://jsfiddle.net/VmtF5/
Perbarui 2018-03-12: Dukungan browser jauh lebih baik sekarang didukung oleh yang berikut ini:
sumber
Saya telah menggunakan ekspresi reguler untuk mengganti nilai input dengan pola yang diperlukan.
var userName = document.querySelector('#numberField'); userName.addEventListener('input', restrictNumber); function restrictNumber (e) { var newValue = this.value.replace(new RegExp(/[^\d]/,'ig'), ""); this.value = newValue; }
<input type="text" id="numberField">
sumber
<input type="text" name="myinput" id="myinput" onkeypress="return isNumber(event);" />
dan di js:
function isNumber(e){ e = e || window.event; var charCode = e.which ? e.which : e.keyCode; return /\d/.test(String.fromCharCode(charCode)); }
atau Anda dapat menuliskannya dengan cara yang rumit tetapi bermanfaat:
<input onkeypress="return /\d/.test(String.fromCharCode(((event||window.event).which||(event||window.event).which)));" type="text" name="myinput" id="myinput" />
Catatan : lintas-browser dan regex secara literal.
sumber
0.43
atau.43
) yang dapat dilakukan dengan memeriksa nilai input saat ini ditambah tombol yang ditekan. Ini akan menjadi jelek dalam kode satu baris, saya sarankan menggunakan fungsi untuk ini. Untuk menguji integer atau float, periksa di sini .<input onkeyup="value=isNaN(parseFloat(value))?1000:value" type="number" value="1000" >
onkeyup
terpicu saat kunci dilepaskan.isNaN(parseFloat(value))?
memeriksa apakah nilai input bukan angka.Jika bukan angka, nilai disetel ke 1000.
:
Jika angka, nilai disetel ke nilai.Catatan: Untuk beberapa alasan, ini hanya berfungsi dengan
type="number"
Untuk membuatnya lebih menarik, Anda juga dapat memiliki batasan:
<input onkeyup="value=isNaN(parseFloat(value))||value<0||value>9000?1000:value" type="number" value="1000" >
Nikmati!
sumber
Saya bertarung dengan yang ini sebentar. Banyak solusi di sini dan di tempat lain tampak rumit. Solusi ini menggunakan jQuery / javascript bersama HTML.
<input type="number" min="1" class="validateNumber"> $(document).on('change', '.validateNumber', function() { var abc = parseInt($(this).val()); if(isNaN(abc)) { abc = 1; } $(this).val(abc); });
Dalam kasus saya, saya melacak jumlah kecil dengan nilai minimum 1, maka min = "1" di tag input dan abc = 1 di cek isNaN (). Untuk bilangan positif saja Anda dapat mengubah nilai tersebut menjadi 0 dan bahkan cukup menghapus min = "1" dari tag input untuk memungkinkan bilangan negatif.
Ini juga berfungsi untuk beberapa kotak (dan dapat menghemat waktu muat untuk melakukannya satu per satu menurut id), cukup tambahkan kelas "validateNumber" jika diperlukan.
Penjelasan
parseInt () pada dasarnya melakukan apa yang Anda butuhkan, kecuali bahwa ia mengembalikan NaN daripada beberapa nilai integer. Dengan if () sederhana Anda dapat menyetel nilai "fallback" yang Anda inginkan dalam semua kasus, NaN dikembalikan :-). Juga W3 menyatakan di sini bahwa versi global NaN akan mengetik cast sebelum pemeriksaan yang memberikan beberapa pemeriksaan tambahan (Number.isNaN () tidak melakukan itu). Nilai apa pun yang dikirim ke server / backend harus tetap divalidasi di sana!
sumber
function AllowOnlyNumbers(e) { e = (e) ? e : window.event; var clipboardData = e.clipboardData ? e.clipboardData : window.clipboardData; var key = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode; var str = (e.type && e.type == "paste") ? clipboardData.getData('Text') : String.fromCharCode(key); return (/^\d+$/.test(str)); }
<h1>Integer Textbox</h1> <input type="text" autocomplete="off" id="txtIdNum" onkeypress="return AllowOnlyNumbers(event);" />
JSFiddle: https://jsfiddle.net/ug8pvysc/
sumber
Bagaimana kalau menggunakan
<input type="number"...>
?http://www.w3schools.com/tags/tag_input.asp
Juga, berikut adalah pertanyaan yang memiliki beberapa contoh penggunaan Javascript untuk validasi .
Pembaruan: ditautkan ke pertanyaan yang lebih baik (terima kasih alexblum).
sumber
Saya menggunakan ini untuk Kode Pos, cepat dan mudah.
<input type="text" id="zip_code" name="zip_code" onkeypress="return event.charCode > 47 && event.charCode < 58;" pattern="[0-9]{5}" required></input>
sumber
jika Anda dapat menggunakan HTML5 Anda dapat melakukannya
<input type="number" />
Jika tidak Anda harus melakukannya baik melalui javascript seperti yang Anda katakan itu tidak mendapatkan dikirimkan untuk melakukannya dari codebehind.<input id="numbersOnly" onkeypress='validate()' /> function validate(){ var returnString; var text = document.getElementByID('numbersOnly').value; var regex = /[0-9]|\./; var anArray = text.split(''); for(var i=0; i<anArray.length; i++){ if(!regex.test(anArray[i])) { anArray[i] = ''; } } for(var i=0; i<anArray.length; i++) { returnString += anArray[i]; } document.getElementByID('numbersOnly').value = returnString; }
PS tidak menguji kode tetapi seharusnya lebih atau kurang benar jika tidak memeriksa kesalahan ketik: D Anda mungkin ingin menambahkan beberapa hal lagi seperti apa yang harus dilakukan jika stringnya nol atau kosong dll. Anda juga dapat membuat ini lebih cepat: D
sumber
jika tidak, set bilangan bulat 0
<input type="text" id="min-value" /> $('#min-value').change(function () { var checkvalue = $('#min-value').val(); if (checkvalue != parseInt(checkvalue)) $('#min-value').val(0); });
sumber
Jawaban yang diterima:
function isNumberKey(evt){ var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; }
Itu bagus tapi tidak sempurna. Ini berhasil untuk saya, tetapi saya mendapat peringatan bahwa pernyataan-if dapat disederhanakan.
Maka akan terlihat seperti ini, yang jauh lebih cantik:
function isNumberKey(evt){ var charCode = (evt.which) ? evt.which : event.keyCode; return !(charCode > 31 && (charCode < 48 || charCode > 57)); }
Akan mengomentari postingan asli, tetapi reputasi saya terlalu rendah untuk melakukannya (baru saja membuat akun ini).
sumber
Anda dapat menggunakan
<input>
tag dengan tipe atribut = 'number'.Misalnya Anda bisa menggunakan
<input type='number' />
Bidang masukan ini hanya mengizinkan nilai numerik. Anda juga dapat menentukan nilai minimum dan nilai maksimum yang harus diterima oleh bidang ini.
sumber
Silakan lihat proyek saya tentang nilai filter lintas-browser dari elemen input teks pada halaman web Anda menggunakan bahasa JavaScript: Filter Kunci Input . Anda dapat memfilter nilai sebagai angka integer, angka float, atau menulis filter kustom, seperti filter nomor telepon. Lihat contoh kode masukan bilangan bulat:
<!doctype html> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Input Key Filter Test</title> <meta name="author" content="Andrej Hristoliubov [email protected]"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <!-- For compatibility of IE browser with audio element in the beep() function. https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible --> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css"> <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script> <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script> </head> <body> <h1>Integer field</h1> <input id="Integer"> <script> CreateIntFilter("Integer", function(event){//onChange event inputKeyFilter.RemoveMyTooltip(); var elementNewInteger = document.getElementById("NewInteger"); var integer = parseInt(this.value); if(inputKeyFilter.isNaN(integer, this)){ elementNewInteger.innerHTML = ""; return; } //elementNewInteger.innerText = integer;//Uncompatible with FireFox elementNewInteger.innerHTML = integer; } //onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid) , function(event){ inputKeyFilter.isNaN(parseInt(this.value), this); } ); </script> New integer: <span id="NewInteger"></span> </body> </html>
Lihat juga halaman saya "bidang Integer:" dari contoh filter kunci masukan
sumber
Untuk tujuan umum, Anda dapat memiliki validasi JS seperti di bawah ini:
Ini akan bekerja untuk keypad Numerik dan tombol angka normal
function isNumberKey(evt){ var charCode = (evt.which) ? evt.which : event.keyCode if (charCode < 31 || (charCode >= 48 && charCode <= 57 ) || (charCode >= 96 && charCode <= 105 )) return true; return false; } <input name="someid" type="number" onkeypress="return isNumberKey(event)"/>
sumber
Tambahkan di dalam tag input Anda: onkeyup = "value = value.replace (/ [^ \ d] / g, '')"
sumber
Saya memperbarui beberapa jawaban yang diposting untuk menambahkan yang berikut ini:
Tentukan berapa banyak angka yang diperbolehkan setelah koma desimal.
String.prototype.isDecimal = function isDecimal(evt,decimalPts) { debugger; var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode != 46 && (charCode < 48 || charCode > 57))) return false; //Prevent more than one point if (charCode == 46 && this.includes(".")) return false; // Restrict the needed decimal digits if (this.includes(".")) { var number = []; number = this.split("."); if (number[1].length == decimalPts) return false; } return true; };
sumber
Saat menggunakan kode ini, Anda tidak dapat menggunakan "BackSpace Button" di Mozilla Firefox, Anda hanya dapat menggunakan backspace di Chrome 47 && event.charCode <58; "pattern =" [0-9] {5} "wajib>
sumber
http://www.texotela.co.uk/code/jquery/numeric/ kredit masukan numerik untuk Leo Vũ karena menyebutkan ini dan tentu saja TexoTela. dengan halaman pengujian.
sumber
Lebih baik menambahkan "+" ke kondisi REGEX untuk menerima banyak digit (tidak hanya satu digit):
<input type="text" name="your_field" pattern="[0-9]+">
sumber
Salah satu caranya adalah dengan memiliki larik kode karakter yang diizinkan dan kemudian menggunakan
Array.includes
fungsi tersebut untuk melihat apakah karakter yang dimasukkan diizinkan.Contoh:
<input type="text" onkeypress="return [45, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57].includes(event.charCode);"/>
sumber
Cukup sederhana?
inputField.addEventListener('input', function () { if ((inputField.value/inputField.value) !== 1) { console.log("Please enter a number"); } });
<input id="inputField" type="text">
sumber