Javascript 如何使用jQuery只允许定义的字符作为输入?

Javascript 如何使用jQuery只允许定义的字符作为输入?,javascript,jquery,Javascript,Jquery,如何在jQuery中允许特殊字符,如连字符、逗号、斜杠、空格键、退格键、删除键以及字母数字值,并限制其余字符 由于此标准(允许的字符/输入值)因字段而异,我希望将其作为一种实用方法,接受输入字段id和允许的字符作为参数。 例如:限制字符(textid、pattern)​您只需在keydown上检查keyCode,然后运行preventDefault(),如果匹配: $('input').keydown(function(e) { if (e.which == 8) { // 8 is b

如何在jQuery中允许特殊字符,如连字符、逗号、斜杠、空格键、退格键、删除键以及字母数字值,并限制其余字符

由于此标准(允许的字符/输入值)因字段而异,我希望将其作为一种实用方法,接受输入字段id和允许的字符作为参数。
例如:限制字符(textid、pattern)

​您只需在
keydown
上检查keyCode,然后运行
preventDefault()
,如果匹配:

$('input').keydown(function(e) {
    if (e.which == 8) { // 8 is backspace
        e.preventDefault();
    }
});​

如果您需要限制某些字符和键码,并将其放入jQuery插件,请尝试以下操作:

$.fn.restrict = function( chars ) {
    return this.keydown(function(e) {
        var found = false, i = -1;
        while(chars[++i] && !found) {
            found = chars[i] == String.fromCharCode(e.which).toLowerCase() || 
                    chars[i] == e.which;
        }
        found || e.preventDefault();
    });
};

$('input').restrict(['a',8,'b']);​

​您只需在
keydown
上检查keyCode,然后运行
preventDefault()
,如果匹配:

$('input').keydown(function(e) {
    if (e.which == 8) { // 8 is backspace
        e.preventDefault();
    }
});​

如果您需要限制某些字符和键码,并将其放入jQuery插件,请尝试以下操作:

$.fn.restrict = function( chars ) {
    return this.keydown(function(e) {
        var found = false, i = -1;
        while(chars[++i] && !found) {
            found = chars[i] == String.fromCharCode(e.which).toLowerCase() || 
                    chars[i] == e.which;
        }
        found || e.preventDefault();
    });
};

$('input').restrict(['a',8,'b']);​

我做了类似的事情,但采用了jQuery插件格式。此示例仅允许数字和句号

您可以通过以下方式将其称为:

$("input").forceNumeric();
和插件:

            jQuery.fn.forceNumeric = function () {

             return this.each(function () {
                 $(this).keydown(function (e) {
                     var key = e.which || e.keyCode;

                     if (!e.shiftKey && !e.altKey && !e.ctrlKey &&
                     // numbers   
                        key >= 48 && key <= 57 ||
                     // Numeric keypad
                        key >= 96 && key <= 105 ||
                     // comma, period and minus, . on keypad
                        key == 190 || key == 188 || key == 109 || key == 110 ||
                     // Backspace and Tab and Enter
                        key == 8 || key == 9 || key == 13 ||
                     // Home and End
                        key == 35 || key == 36 ||
                     // left and right arrows
                        key == 37 || key == 39 ||
                     // Del and Ins
                        key == 46 || key == 45)
                        return true;

                    return false;
                });
            });
        }
jQuery.fn.forceNumeric=函数(){
返回此。每个(函数(){
$(此).keydown(函数(e){
var key=e.which | e.keyCode;
如果(!e.shiftKey&&!e.altKey&&!e.ctrlKey&&
//数字

key>=48&&key=96&&key我做了类似的事情,但是使用jQuery插件格式。这个例子只允许数字和句号

您可以通过以下方式将其称为:

$("input").forceNumeric();
和插件:

            jQuery.fn.forceNumeric = function () {

             return this.each(function () {
                 $(this).keydown(function (e) {
                     var key = e.which || e.keyCode;

                     if (!e.shiftKey && !e.altKey && !e.ctrlKey &&
                     // numbers   
                        key >= 48 && key <= 57 ||
                     // Numeric keypad
                        key >= 96 && key <= 105 ||
                     // comma, period and minus, . on keypad
                        key == 190 || key == 188 || key == 109 || key == 110 ||
                     // Backspace and Tab and Enter
                        key == 8 || key == 9 || key == 13 ||
                     // Home and End
                        key == 35 || key == 36 ||
                     // left and right arrows
                        key == 37 || key == 39 ||
                     // Del and Ins
                        key == 46 || key == 45)
                        return true;

                    return false;
                });
            });
        }
jQuery.fn.forceNumeric=函数(){
返回此。每个(函数(){
$(此).keydown(函数(e){
var key=e.which | e.keyCode;
如果(!e.shiftKey&&!e.altKey&&!e.ctrlKey&&
//数字

key>=48&&key=96&&key我建议对修改键(如backspace和delete)使用David解决方案,以下代码用于字符:

var chars = /[,\/\w]/i; // all valid characters
$('input').keyup(function(e) {
  var value = this.value;
  var char = value[value.length-1];
  if (!chars.test(char)) {
    $(this).val(value.substring(0, value.length-1));
  }
});
另外,我在使用
keydown
时遇到了一些问题,所以我会在
keydup
上进行操作


演示:(尝试键入点
或分号

我建议对修改键(如backspace和delete)使用David解决方案,以下代码用于字符:

var chars = /[,\/\w]/i; // all valid characters
$('input').keyup(function(e) {
  var value = this.value;
  var char = value[value.length-1];
  if (!chars.test(char)) {
    $(this).val(value.substring(0, value.length-1));
  }
});
另外,我在使用
keydown
时遇到了一些问题,所以我会在
keydup
上进行操作


演示:(尝试键入点
或分号

您有任何尝试的代码示例吗?谢谢大家的帮助…现在我需要比较非英语字符…例如Azhari..如何使用模式匹配?基本上我的应用程序应该支持英语和Azhari字符..我很惊讶。请帮助我…您有任何尝试的代码示例吗?比谢谢大家的帮助…现在我需要比较非英语字符..例如Azhari..我如何使用模式匹配?基本上我的应用程序应该支持英语和Azhari字符..这里我很震惊。请帮我解决…如果您按住
键,则失败如果您按住
键,则失败此操作snt不适用于某些字符,例如0和/等,但它是一个很好的限制字母和数字的函数。这不适用于某些字符,例如0和/等,但它是一个很好的限制字母和数字的函数。