ฉันจะบล็อกอักขระพิเศษไม่ให้พิมพ์ลงในช่องป้อนข้อมูลด้วย jquery ได้อย่างไร
ฉันจะบล็อกอักขระพิเศษไม่ให้พิมพ์ลงในช่องป้อนข้อมูลด้วย jquery ได้อย่างไร
คำตอบ:
ตัวอย่างง่ายๆโดยใช้นิพจน์ทั่วไปซึ่งคุณสามารถเปลี่ยนเพื่ออนุญาต / ไม่อนุญาตอะไรก็ได้ที่คุณต้องการ
$('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;
}
});
ฉันกำลังมองหาคำตอบที่ จำกัด การป้อนข้อมูลไว้เฉพาะอักขระที่เป็นตัวเลขและตัวอักษร แต่ยังคงอนุญาตให้ใช้อักขระควบคุม (เช่น backspace, delete, tab) และคัดลอก + วาง ไม่มีคำตอบใดที่ฉันได้ลองทำตามข้อกำหนดเหล่านี้ทั้งหมดดังนั้นฉันจึงคิดสิ่งต่อไปนี้โดยใช้input
เหตุการณ์
$('input').on('input', function() {
$(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});
แก้ไข:
ตามที่Rinogoชี้ให้เห็นในความคิดเห็นข้อมูลโค้ดด้านบนบังคับให้เคอร์เซอร์ไปที่จุดสิ้นสุดของอินพุตเมื่อพิมพ์ตรงกลางข้อความอินพุต ฉันเชื่อว่าข้อมูลโค้ดด้านล่างช่วยแก้ปัญหานี้ได้
$('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
หรือevent.keycode
! หวังว่าฉันจะทำได้ +10!
คำตอบสั้น ๆ :ป้องกันเหตุการณ์ 'กดแป้น':
$("input").keypress(function(e){
var charCode = !e.charCode ? e.which : e.charCode;
if(/* Test for special character */ )
e.preventDefault();
})
คำตอบแบบยาว:ใช้ปลั๊กอินเช่นjquery.alphanum
มีหลายสิ่งที่ควรพิจารณาเมื่อเลือกวิธีแก้ปัญหา:
ฉันคิดว่าพื้นที่นี้ซับซ้อนพอที่จะรับประกันการใช้ปลั๊กอินของบุคคลที่สาม ฉันลองใช้ปลั๊กอินที่มีอยู่หลายตัว แต่พบปัญหาบางอย่างกับแต่ละปลั๊กอินดังนั้นฉันจึงเขียนjquery.alphanumต่อไป รหัสมีลักษณะดังนี้:
$("input").alphanum();
หรือสำหรับการควบคุมที่ละเอียดยิ่งขึ้นให้เพิ่มการตั้งค่าบางอย่าง:
$("#username").alphanum({
allow : "€$£",
disallow : "xyz",
allowUpper : false
});
หวังว่าจะช่วยได้
allow
ตั้งค่า แต่นั่นคือความสวยงามของปลั๊กอิน jquery ซึ่งคุณสามารถปรับเปลี่ยนให้เหมาะกับความต้องการของคุณได้ ขอบคุณ!
allow
ตัวเลือกและมันก็ใช้ได้สำหรับฉันโดยใช้รหัสนี้: $('#firstName').alphanum({allow: "/"});
มีโอกาสใดที่คุณสามารถให้ข้อมูลเพิ่มเติมได้? หากมีข้อบกพร่องหรือปัญหาเกี่ยวกับเอกสารจะเป็นการดีหากได้รับการแก้ไข Cheers
allowOtherCharSets: false
แทรกแซงเหล่านี้ด้วยการตั้งค่าที่ตั้งไว้ในallowCaseless: false
allow
จากมุมมองของฉันฉันคิดว่าallow
ตัวเลือกควรยับยั้งตัวเลือกอื่น ๆ ทั้งหมด (เช่นallowOtherCharSets
หรือallowCaseless
) ดังนั้นหากคุณระบุอักขระในallow
ตัวเลือกควรได้รับอนุญาตโดยไม่คำนึงถึงตัวเลือกอื่น ๆ ที่ตั้งค่าไว้ในออบเจ็กต์การกำหนดค่า disallow
เดียวกันจะไปสำหรับ แต่นี่เป็นเพียงความคิดเห็นของฉัน :) ไชโยอีกครั้ง! :)
ใช้แอตทริบิวต์การป้อนรูปแบบของ HTML5!
<input type="text" pattern="^[a-zA-Z0-9]+$" />
กล่องข้อความของคุณ:
<input type="text" id="name">
จาวาสคริปต์ของคุณ:
$("#name").keypress(function(event) {
var character = String.fromCharCode(event.keyCode);
return isValid(character);
});
function isValid(str) {
return !/[~`!@#$%\^&*()+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
ใช้ regex เพื่ออนุญาต / ไม่อนุญาตสิ่งใด ๆ นอกจากนี้สำหรับเวอร์ชันที่มีประสิทธิภาพมากกว่าคำตอบที่ยอมรับเล็กน้อยการอนุญาตให้ใช้อักขระที่ไม่มีค่าคีย์ที่เกี่ยวข้อง (แบ็กสเปซแท็บแป้นลูกศรลบ ฯลฯ ) สามารถทำได้โดยผ่านเหตุการณ์การกดแป้นและ ตรวจสอบคีย์ตามรหัสแทนค่า
$('#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;
}
});
ลองดูที่ปลั๊กอิน 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'});
เขียนโค้ดจาวาสคริปต์ในเหตุการณ์ onkeypress ของ textbox ตามข้อกำหนดอนุญาตและ จำกัด อักขระในกล่องข้อความของคุณ
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;
}
ฉันใช้รหัสนี้เพื่อแก้ไขสิ่งอื่น ๆ ที่ฉันเห็น เฉพาะผู้ใช้เท่านั้นที่ยิ่งใหญ่เขียนหากกดแป้นหรือวางข้อความผ่านการทดสอบรูปแบบ (จับคู่) (ตัวอย่างนี้เป็นการป้อนข้อความที่อนุญาตให้มีเพียง 8 หลัก)
$("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
ไม่เพียงe.charCode ? e.charCode : e.which
?
นี่คือตัวอย่างที่ป้องกันไม่ให้ผู้ใช้พิมพ์อักขระ "a"
$(function() {
$('input:text').keydown(function(e) {
if(e.keyCode==65)
return false;
});
});
การอ้างอิงรหัสสำคัญที่นี่:
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, '');
}
});
});
ใช่คุณสามารถทำได้โดยใช้ jQuery เป็น:
<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>
และสคริปต์สำหรับuser_availability.phpของคุณจะเป็น:
<?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";
}
}
?>
ฉันพยายามเพิ่มสำหรับ/และ\แต่ไม่สำเร็จ
คุณสามารถทำได้โดยใช้ javascript & code จะเป็น:
<!-- 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)"/>
แค่ตัวเลข:
$ ('input.time'). keydown (function (e) {if (e.keyCode> = 48 && e.keyCode <= 57) (return true;} else {return false;}});
หรือสำหรับเวลา ได้แก่ ":"
$ ('input.time'). keydown (function (e) {if (e.keyCode> = 48 && e.keyCode <= 58) (return true;} else {return false;}});
ยังรวมถึงลบและ backspace:
$ ('input.time'). keydown (function (e) {if ((e.keyCode> = 46 && e.keyCode <= 58) || e.keyCode == 8) {return true;} else {return เท็จ;}});
โชคไม่ดีที่ไม่ทำให้มันทำงานบน iMAC
ต้องการแสดงความคิดเห็นเกี่ยวกับความคิดเห็นของ Alex ต่อคำตอบของ Dale เป็นไปไม่ได้ (อันดับแรกต้องการ "ตัวแทน" เท่าไหร่สิ่งนั้นจะไม่เกิดขึ้นในไม่ช้า .. ระบบแปลก ๆ ) ดังนั้นคำตอบ:
สามารถเพิ่ม Backspace ได้โดยการเพิ่ม \ b ในนิยาม regex ดังนี้: [a-zA-Z0-9 \ b] หรือคุณเพียงแค่อนุญาตช่วงละตินทั้งหมดรวมทั้งอักขระที่ "ไม่แปลกใหม่" มากหรือน้อย (ควบคุมอักขระเช่น backspace ด้วย): ^ [\ u0000- \ u024F \ u20AC] + $
เฉพาะถ่านยูนิโคดจริงนอกละตินเท่านั้นที่มีเครื่องหมายยูโร (20ac) เพิ่มสิ่งที่คุณต้องการ
หากต้องการจัดการอินพุตที่ป้อนผ่านการคัดลอกและวางเพียงเชื่อมโยงกับเหตุการณ์ "เปลี่ยนแปลง" และตรวจสอบอินพุตที่นั่นด้วยเช่นการลบหรือตัดออก / ให้ข้อความแสดงข้อผิดพลาดเช่น "อักขระที่ไม่รองรับ" ..
if (!regex.test($j(this).val())) {
alert('your input contained not supported characters');
$j(this).val('');
return false;
}
จำกัด อักขระพิเศษในการกดแป้น นี่คือหน้าทดสอบรหัสคีย์: 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();
}
});
ใน Angular ฉันต้องการรูปแบบสกุลเงินที่เหมาะสมในฟิลด์ข้อความของฉัน วิธีแก้ปัญหาของฉัน:
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();
}
ใน html ให้เพิ่มคำสั่ง
<input only-num type="text" maxlength="10" id="amount" placeholder="$XXXX.XX"
autocomplete="off" ng-model="vm.amount" ng-change="vm.updateRequest()">
และในตัวควบคุมเชิงมุมที่เกี่ยวข้องฉันอนุญาตให้มีเพียง 1 ช่วงเวลาเท่านั้นแปลงข้อความเป็นตัวเลขและเพิ่มการปัดเศษตัวเลขใน 'เบลอ'
...
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;
}
...
ในการแทนที่อักขระพิเศษเว้นวรรคและแปลงเป็นตัวพิมพ์เล็ก
$(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();
}
}
}
});]
อนุญาตเฉพาะตัวเลขในกล่องข้อความ (จำกัด ตัวอักษรและอักขระพิเศษ)
/*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;
}