如何使用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;
}
});
我正在寻找一种只允许字母数字字符输入,但仍然可以使用控制字符(例如,退格、删除、制表符)和复制+粘贴的答案。我尝试了所有提供的答案,但没有一个能满足所有要求,所以我通过使用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);
});
简短回答:阻止'keypress'事件:
$("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
});
希望对您有所帮助。
使用简单的onkeypress事件内联。
<input type="text" name="count" onkeypress="return /[0-9a-zA-Z]/i.test(event.key)">
onkeypress
现已被弃用,建议使用onkeydown
。 - Thayne使用HTML5的模式输入属性!
<input type="text" pattern="^[a-zA-Z0-9]+$" />
使用正则表达式允许/禁止任何字符。此外,为了比接受的答案稍微更强大一点,允许不带键值关联的字符(退格、制表符、箭头键、删除键等),可以首先通过按键事件传递并根据keycode而不是value检查键。
$('#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;
}
});
您的文本框:
<input type="text" id="name">
您的 JavaScript 代码:
$("#name").keypress(function(event) {
var character = String.fromCharCode(event.keyCode);
return isValid(character);
});
function isValid(str) {
return !/[~`!@#$%\^&*()+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
}
请查看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'});
这是一个防止用户输入字符“a”的示例。
$(function() {
$('input:text').keydown(function(e) {
if(e.keyCode==65)
return false;
});
});
这里提供按键代码参考:
http://www.expandinghead.net/keycode.html
我使用这段代码对其他我看到的代码进行修改。只有在按键或粘贴文本通过模式测试(匹配)时才授权用户编写(此示例是仅允许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
? - Massimiliano Kraus