仅允许输入字段中的某些字符

时间:2016-06-17 08:32:51

标签: javascript jquery regex

http://jsbin.com/cunejafehe/edit?html,js,console,output

var reg = /^[a-zA-Z\d\s\-'#(),"]*$/;
   
function myFunction(e){
  console.log(e.value);
  if(reg.test(e.value))
   {
     return false;
   }
}
<input onkeyup="myFunction(this)" type="text">

我想知道为什么上面的代码不起作用,我想要做的是只允许这些字符在输入中:a-z1-9包括0,以及这些字符-'#(),"

2 个答案:

答案 0 :(得分:2)

请看一下这种方法。在这里,我传递一个event对象而不是DOM元素引用,然后我们将根据Regx表达式进行检查。

var reg = /^[a-zA-Z\d\s\-'#(),"0-9]*$/
   
function myFunction(e){
  var c = String.fromCharCode(e.which)
  console.log(c);
  if(reg.test(c))
   {
     return true;
   }
 else
   return false;
}

$(document).ready(function(){
  $( "#mytextbox" ).keypress(function( e) {
    return myFunction(e);
  });
});  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
Inline function : <input onkeypress="return myFunction(event)" type="text">
<br/>

Binding a function : <input id="mytextbox" type="text">

答案 1 :(得分:0)

test方法属于RegExp对象,因为您没有使用它,您应该在myFunction中将reg.test(c)更改为c.match(reg)

此外,您通过传递this来处理该字段的全部值。我想你可以做这样的事情,即使不是很优雅:

 var reg = /^[a-zA-Z\d\s\-'#(),"]*$/;
 
function myFunction(e){
  if (!e.value.match(reg)) {
    e.value = e.value.slice(0, -1);
  }
}
<input onkeyup="myFunction(this)" type="text">