Bagaimana cara memblokir karakter khusus agar tidak diketik ke dalam kolom input dengan jquery?
Bagaimana cara memblokir karakter khusus agar tidak diketik ke dalam kolom input dengan jquery?
Jawaban:
Contoh sederhana menggunakan ekspresi reguler yang dapat Anda ubah untuk mengizinkan / melarang apa pun yang Anda suka.
$('input').on('keypress', function (event) {
var regex = new RegExp("^[a-zA-Z0-9]+$");
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
event.preventDefault();
return false;
}
});
Saya mencari jawaban yang membatasi masukan hanya untuk karakter alfanumerik, tetapi masih diperbolehkan untuk penggunaan karakter kontrol (misalnya, spasi mundur, hapus, tab) dan salin + tempel. Tak satu pun dari jawaban yang diberikan yang saya coba memenuhi semua persyaratan ini, jadi saya datang dengan yang berikut menggunakan input
acara tersebut.
$('input').on('input', function() {
$(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});
Sunting:
Seperti yang ditunjukkan rinogo di komentar, potongan kode di atas memaksa kursor ke akhir masukan saat mengetik di tengah teks masukan. Saya yakin potongan kode di bawah ini menyelesaikan masalah ini.
$('input').on('input', function() {
var c = this.selectionStart,
r = /[^a-z0-9]/gi,
v = $(this).val();
if(r.test(v)) {
$(this).val(v.replace(r, ''));
c--;
}
this.setSelectionRange(c, c);
});
event.which
atau event.keycode
! Seandainya aku bisa +10!
Jawaban singkat: cegah acara 'penekanan tombol':
$("input").keypress(function(e){
var charCode = !e.charCode ? e.which : e.charCode;
if(/* Test for special character */ )
e.preventDefault();
})
Jawaban panjang: Gunakan plugin seperti jquery.alphanum
Ada beberapa hal yang perlu dipertimbangkan saat memilih solusi:
Saya pikir area ini cukup kompleks untuk menjamin penggunaan plugin pihak ketiga. Saya mencoba beberapa plugin yang tersedia tetapi menemukan beberapa masalah dengan masing-masing plugin sehingga saya melanjutkan dan menulis jquery.alphanum . Kodenya terlihat seperti ini:
$("input").alphanum();
Atau untuk kontrol yang lebih halus, tambahkan beberapa pengaturan:
$("#username").alphanum({
allow : "€$£",
disallow : "xyz",
allowUpper : false
});
Semoga membantu.
allow
pengaturan. Tapi itulah keindahan plugin jquery, fakta bahwa Anda dapat memodifikasinya sesuai dengan kebutuhan Anda. Terima kasih!
allow
opsi dan berfungsi dengan baik bagi saya menggunakan kode ini: $('#firstName').alphanum({allow: "/"});
Adakah kemungkinan Anda dapat memberikan info lebih lanjut? Jika ada bug atau masalah dengan dokumen, alangkah baiknya untuk memperbaikinya. Cheers
allowOtherCharSets: false
dan allowCaseless: false
. Ini mengganggu pengaturan yang ditetapkan allow
. Dari sudut pandang saya, menurut saya allow
opsi tersebut harus memveto semua opsi lain (seperti allowOtherCharSets
atau allowCaseless
). Jadi jika Anda menentukan karakter dalam allow
opsi, itu harus diizinkan terlepas dari opsi lain yang disetel dalam objek konfigurasi. Hal yang sama berlaku untuk disallow
. Tapi ini hanya pendapat saya. :) Bersulang lagi! :)
allow
dan disallow
memiliki prioritas yang lebih tinggi. Ini masuk masalah # 7 . Semoga membantu
Gunakan atribut input pola HTML5!
<input type="text" pattern="^[a-zA-Z0-9]+$" />
Kotak teks Anda:
<input type="text" id="name">
Javascript Anda:
$("#name").keypress(function(event) {
var character = String.fromCharCode(event.keyCode);
return isValid(character);
});
function isValid(str) {
return !/[~`!@#$%\^&*()+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
Gunakan regex untuk mengizinkan / melarang apa pun. Selain itu, untuk versi yang sedikit lebih kuat daripada jawaban yang diterima, mengizinkan karakter yang tidak memiliki nilai kunci yang terkait dengannya (spasi mundur, tab, tombol panah, hapus, dll.) Dapat dilakukan dengan terlebih dahulu melewati peristiwa penekanan tombol dan periksa kunci berdasarkan kode kunci, bukan nilai.
$('#input').bind('keydown', function (event) {
switch (event.keyCode) {
case 8: // Backspace
case 9: // Tab
case 13: // Enter
case 37: // Left
case 38: // Up
case 39: // Right
case 40: // Down
break;
default:
var regex = new RegExp("^[a-zA-Z0-9.,/ $@()]+$");
var key = event.key;
if (!regex.test(key)) {
event.preventDefault();
return false;
}
break;
}
});
Lihatlah plugin alfanumerik jQuery. https://github.com/KevinSheedy/jquery.alphanum
//All of these are from their demo page
//only numbers and alpha characters
$('.sample1').alphanumeric();
//only numeric
$('.sample4').numeric();
//only numeric and the .
$('.sample5').numeric({allow:"."});
//all alphanumeric except the . 1 and a
$('.sample6').alphanumeric({ichars:'.1a'});
Tulis beberapa kode javascript pada acara onkeypress dari textbox. sesuai persyaratan mengizinkan dan membatasi karakter di kotak teks Anda
function isNumberKeyWithStar(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 42)
return false;
return true;
}
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
function isNumberKeyForAmount(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
return false;
return true;
}
Saya menggunakan kode ini memodifikasi orang lain yang saya lihat. Hanya grand untuk pengguna menulis jika tombol yang ditekan atau ditempelkan teks lulus tes pola (cocok) (contoh ini adalah input teks yang hanya memungkinkan 8 digit)
$("input").on("keypress paste", function(e){
var c = this.selectionStart, v = $(this).val();
if (e.type == "keypress")
var key = String.fromCharCode(!e.charCode ? e.which : e.charCode)
else
var key = e.originalEvent.clipboardData.getData('Text')
var val = v.substr(0, c) + key + v.substr(c, v.length)
if (!val.match(/\d{0,8}/) || val.match(/\d{0,8}/).toString() != val) {
e.preventDefault()
return false
}
})
!e.charCode ? e.which : e.charCode
dan tidak sederhana e.charCode ? e.charCode : e.which
?
ini adalah contoh yang mencegah pengguna mengetik karakter "a"
$(function() {
$('input:text').keydown(function(e) {
if(e.keyCode==65)
return false;
});
});
refence kode kunci di sini:
http://www.expandinghead.net/keycode.html
$(function(){
$('input').keyup(function(){
var input_val = $(this).val();
var inputRGEX = /^[a-zA-Z0-9]*$/;
var inputResult = inputRGEX.test(input_val);
if(!(inputResult))
{
this.value = this.value.replace(/[^a-z0-9\s]/gi, '');
}
});
});
Ya, Anda dapat melakukannya dengan menggunakan jQuery sebagai:
<script>
$(document).ready(function()
{
$("#username").blur(function()
{
//remove all the class add the messagebox classes and start fading
$("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
//check the username exists or not from ajax
$.post("user_availability.php",{ user_name:$(this).val() } ,function(data)
{
if(data=='empty') // if username is empty
{
$("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
{
//add message and change the class of the box and start fading
$(this).html('Empty user id is not allowed').addClass('messageboxerror').fadeTo(900,1);
});
}
else if(data=='invalid') // if special characters used in username
{
$("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
{
//add message and change the class of the box and start fading
$(this).html('Sorry, only letters (a-z), numbers (0-9), and periods (.) are allowed.').addClass('messageboxerror').fadeTo(900,1);
});
}
else if(data=='no') // if username not avaiable
{
$("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
{
//add message and change the class of the box and start fading
$(this).html('User id already exists').addClass('messageboxerror').fadeTo(900,1);
});
}
else
{
$("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
{
//add message and change the class of the box and start fading
$(this).html('User id available to register').addClass('messageboxok').fadeTo(900,1);
});
}
});
});
});
</script>
<input type="text" id="username" name="username"/><span id="msgbox" style="display:none"></span>
dan skrip untuk user_availability.php Anda adalah:
<?php
include'includes/config.php';
//value got from the get method
$user_name = trim($_POST['user_name']);
if($user_name == ''){
echo "empty";
}elseif(preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $user_name)){
echo "invalid";
}else{
$select = mysql_query("SELECT user_id FROM staff");
$i=0;
//this varible contains the array of existing users
while($fetch = mysql_fetch_array($select)){
$existing_users[$i] = $fetch['user_id'];
$i++;
}
//checking weather user exists or not in $existing_users array
if (in_array($user_name, $existing_users))
{
//user name is not availble
echo "no";
}
else
{
//user name is available
echo "yes";
}
}
?>
Saya mencoba menambahkan untuk / dan \ tetapi tidak berhasil.
Anda juga dapat melakukannya dengan menggunakan javascript & kode akan menjadi:
<!-- Check special characters in username start -->
<script language="javascript" type="text/javascript">
function check(e) {
var keynum
var keychar
var numcheck
// For Internet Explorer
if (window.event) {
keynum = e.keyCode;
}
// For Netscape/Firefox/Opera
else if (e.which) {
keynum = e.which;
}
keychar = String.fromCharCode(keynum);
//List of special characters you want to restrict
if (keychar == "'" || keychar == "`" || keychar =="!" || keychar =="@" || keychar =="#" || keychar =="$" || keychar =="%" || keychar =="^" || keychar =="&" || keychar =="*" || keychar =="(" || keychar ==")" || keychar =="-" || keychar =="_" || keychar =="+" || keychar =="=" || keychar =="/" || keychar =="~" || keychar =="<" || keychar ==">" || keychar =="," || keychar ==";" || keychar ==":" || keychar =="|" || keychar =="?" || keychar =="{" || keychar =="}" || keychar =="[" || keychar =="]" || keychar =="¬" || keychar =="£" || keychar =='"' || keychar =="\\") {
return false;
} else {
return true;
}
}
</script>
<!-- Check special characters in username end -->
<!-- in your form -->
User id : <input type="text" id="txtname" name="txtname" onkeypress="return check(event)"/>
angkanya saja:
$ ('input.time'). keydown (function (e) {if (e.keyCode> = 48 && e.keyCode <= 57) {return true;} else {return false;}});
atau untuk waktu termasuk ":"
$ ('input.time'). keydown (function (e) {if (e.keyCode> = 48 && e.keyCode <= 58) {return true;} else {return false;}});
juga termasuk delete dan backspace:
$ ('input.time'). keydown (function (e) {if ((e.keyCode> = 46 && e.keyCode <= 58) || e.keyCode == 8) {return true;} else {return Salah; } });
sayangnya tidak membuatnya berfungsi di iMAC
Ingin mengomentari komentar Alex atas jawaban Dale. Tidak mungkin (pertama perlu berapa banyak "rep"? Itu tidak akan terjadi segera .. sistem aneh.) Jadi sebagai jawaban:
Backspace dapat ditambahkan dengan menambahkan \ b ke definisi regex seperti ini: [a-zA-Z0-9 \ b]. Atau Anda cukup mengizinkan seluruh rentang Latin, termasuk karakter "tidak eksotis" apa pun (juga mengontrol karakter seperti spasi mundur): ^ [\ u0000- \ u024F \ u20AC] + $
Hanya karakter unicode asli di luar latin ada tanda euro (20ac), tambahkan apa pun yang mungkin Anda butuhkan.
Untuk juga menangani masukan yang dimasukkan melalui salin & tempel, cukup ikat juga ke acara "ubah" dan periksa juga masukan di sana - menghapusnya atau melucuti / memberikan pesan kesalahan seperti "karakter tidak didukung" ..
if (!regex.test($j(this).val())) {
alert('your input contained not supported characters');
$j(this).val('');
return false;
}
Batasi karakter spesial saat tombol ditekan. Berikut adalah halaman uji untuk kode kunci: http://www.asquare.net/javascript/tests/KeyCode.html
var specialChars = [62,33,36,64,35,37,94,38,42,40,41];
some_element.bind("keypress", function(event) {
// prevent if in array
if($.inArray(event.which,specialChars) != -1) {
event.preventDefault();
}
});
Di Angular, saya membutuhkan format mata uang yang tepat di bidang teks saya. Solusi saya:
var angularApp = angular.module('Application', []);
...
// new angular directive
angularApp.directive('onlyNum', function() {
return function( scope, element, attrs) {
var specialChars = [62,33,36,64,35,37,94,38,42,40,41];
// prevent these special characters
element.bind("keypress", function(event) {
if($.inArray(event.which,specialChars) != -1) {
prevent( scope, event, attrs)
}
});
var allowableKeys = [8,9,37,39,46,48,49,50,51,52,53,54,55,56
,57,96,97,98,99,100,101,102,103,104,105,110,190];
element.bind("keydown", function(event) {
if($.inArray(event.which,allowableKeys) == -1) {
prevent( scope, event, attrs)
}
});
};
})
// scope.$apply makes angular aware of your changes
function prevent( scope, event, attrs) {
scope.$apply(function(){
scope.$eval(attrs.onlyNum);
event.preventDefault();
});
event.preventDefault();
}
Di html tambahkan direktif
<input only-num type="text" maxlength="10" id="amount" placeholder="$XXXX.XX"
autocomplete="off" ng-model="vm.amount" ng-change="vm.updateRequest()">
dan dalam pengontrol sudut yang sesuai, saya hanya mengizinkan hanya ada 1 periode, ubah teks menjadi angka dan tambahkan pembulatan angka pada 'blur'
...
this.updateRequest = function() {
amount = $scope.amount;
if (amount != undefined) {
document.getElementById('spcf').onkeypress = function (e) {
// only allow one period in currency
if (e.keyCode === 46 && this.value.split('.').length === 2) {
return false;
}
}
// Remove "." When Last Character and round the number on blur
$("#amount").on("blur", function() {
if (this.value.charAt(this.value.length-1) == ".") {
this.value.replace(".","");
$("#amount").val(this.value);
}
var num = parseFloat(this.value);
// check for 'NaN' if its safe continue
if (!isNaN(num)) {
var num = (Math.round(parseFloat(this.value) * 100) / 100).toFixed(2);
$("#amount").val(num);
}
});
this.data.amountRequested = Math.round(parseFloat(amount) * 100) / 100;
}
...
Untuk mengganti karakter khusus, spasi dan ubah ke huruf kecil
$(document).ready(function (){
$(document).on("keyup", "#Id", function () {
$("#Id").val($("#Id").val().replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '').toLowerCase());
});
});
[User below code to restrict special character also
$(h.txtAmount).keydown(function (event) {
if (event.shiftKey) {
event.preventDefault();
}
if (event.keyCode == 46 || event.keyCode == 8) {
}
else {
if (event.keyCode < 95) {
if (event.keyCode < 48 || event.keyCode > 57) {
event.preventDefault();
}
}
else {
if (event.keyCode < 96 || event.keyCode > 105) {
event.preventDefault();
}
}
}
});]
Izinkan hanya angka di TextBox (Batasi Huruf dan Karakter Khusus)
/*code: 48-57 Numbers
8 - Backspace,
35 - home key, 36 - End key
37-40: Arrow keys, 46 - Delete key*/
function restrictAlphabets(e){
var x=e.which||e.keycode;
if((x>=48 && x<=57) || x==8 ||
(x>=35 && x<=40)|| x==46)
return true;
else
return false;
}
/**
* Forbids special characters and decimals
* Allows numbers only
* */
const numbersOnly = (evt) => {
let charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode === 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
let inputResult = /^[0-9]*$/.test(evt.target.value);
if (!inputResult) {
evt.target.value = evt.target.value.replace(/[^a-z0-9\s]/gi, '');
}
return true;
}