我试图在javascript中使用regex输入字段。
我所做的是,eveytime按下一个键,正在调用以下代码:
function testPattern(pattern, evt) {
// in this case, pattern = "^[0-9]*$"
var inputField = evt.getCurrentTarget();
var keyCode = evt.getKeyCode();
var oldValue = inputField.getSubmittedValue();
// return if keycode is navigation, delete or backspace
if((keyCode >= 35 && keyCode <= 40) || keyCode == 8 || keyCode == 46){
return;
}
var regExp = new RegExp(pattern);
var hasMatch = false;
hasMatch = regExp.test(String.fromCharCode(keyCode));
if (!hasMatch) {
inputField.setValue(oldValue);
evt.cancel();
}
}
预期结果是:如果输入与数字不同,则输入文本框中不会写入任何字符。
它的工作正常,除了字符#$%&amp; 和(
我试过以下正则表达式(非常相似)
"^[\\d]$"
"^[\\d]*$"
"^[\\d]+$"
"^[0-9]*$"
有人知道为什么会这样吗?
答案 0 :(得分:2)
你的正则表达式没有任何问题。
问题在于
// return if keycode is navigation, delete or backspace
if((keyCode >= 35 && keyCode <= 40) || keyCode == 8 || keyCode == 46)
return;
如果你看一下ascii表,你会看到:
8 backspace
35 #
36 $
37 %
38 &
39 ´
40 (
46 .
您的问题来自您正在收听的浏览器工具/键盘事件中的keyCode和charCode之间的混淆:
这个问题可能是一个很好的解读:keycode and charcode
答案 1 :(得分:0)
以这种方式使用正则表达式:
/^\d+$/
答案 2 :(得分:0)
限制此ASCII 35,36,37,38,39,40以限制这些符号,或者您可以使用下面提到的代码。
<script type="text/javascript">
var specialKeys = new Array();
specialKeys.push(8); //Backspace
specialKeys.push(9); //Tab
specialKeys.push(46); //Delete
specialKeys.push(36); //Home
specialKeys.push(35); //End
specialKeys.push(37); //Left
specialKeys.push(39); //Right
function IsAlphaNumeric(e) {
var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode;
var ret = ((keyCode >= 32 && keyCode <= 32)||(keyCode >= 44 && keyCode <= 44)||(keyCode >= 46 && keyCode <= 46)||(keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122) || (specialKeys.indexOf(e.keyCode) != -1 && e.charCode != e.keyCode));
document.getElementById("error").style.display = ret ? "none" : "inline";
return ret;
}
</script>