不允许输入某些字符的jQuery方法

时间:2015-07-08 13:27:49

标签: javascript jquery regex

我试图制作一个jQuery方法,从所选元素中删除想要的字符。

例如:

$("input").disallowChars(/\D/g);// should disallow input of all non-digit elements in input elements

这就是我想的方法,但它似乎不起作用:

$.fn.disallowChars = function(regexp){
  this.keyup(function(){

    var value = $(this).val();
    value.replace(regexp, "");
    $(this).val(value);

  });
  return this;
};

$("input").disallowChars(/\D/g);

我是一个新手,我怎么能让它发挥作用。

由于

2 个答案:

答案 0 :(得分:1)

这是一个方便的例程,用于清理当前项目中的一些输入字段:

// REPLACE SELECTOR WITH YOUR ID(S) OR SELECTORS...
$('input').bind("change keyup", function() {  
 var val = $.trim($(this).val());
    // READ UP ON REGEX TO UNDERSTAND WHATS GOING ON HERE... ADD CHARACTERS YOU WANT TO ELIMINATE...
    var regex = /[":'/\+;<>&\\/\n]/g;
 if (val.match(regex)) {
   val = val.replace(regex, "");
   $(this).val($.trim(val));
 }
});

这是我最近使用的另一个版本:

$("#myField").on("keypress", function(event) {
// THIS ONLY ALLOWS A-Z, A-Z, 0-9 AND THE @ SYMBOL... just change stuffToAllow to suit your needs
var stuffToAllow = /[A-Za-z0-9@ ]/g;
var key = String.fromCharCode(event.which);
if (event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39 || stuffToAllow.test(key)) {
    return true;
}
alert( key + ' character not allowed!');
return false;

});

答案 1 :(得分:1)

您可以改为使用String.fromCharCode()keypress事件:

$.fn.disallowChars = function(regexp){
  return this.keypress(function(e){
      if(String.fromCharCode(e.which).match(regexp)) return false;
  });
};

DEMO

不会使用鼠标或粘贴键盘快捷键禁用任何要粘贴的字符。

在现代浏览器中,您可以使用input事件或change keyup paste mouseup(鼠标,也可以处理删除的文本):

$.fn.disallowChars = function(regexp){
  return this.on('input', function(){
      this.value = this.value.replace(regexp, '');          
  });
};

但是然后一旦输入值被替换,文本carret将被放入字符串输入的结尾(或开始取决于浏览器行为)。

DEMO