gpt4 book ai didi

仅用于数字的 Javascript 正则表达式接受 # $ % & (

转载 作者:行者123 更新时间:2023-11-30 16:40:34 25 4
gpt4 key购买 nike


我正在尝试在 javascript 中对输入字段进行正则表达式。我所做的是,每次按下一个键时,都会调用以下代码:

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();
}
}

预期结果是:如果输入的不是数字,则不会在输入文本框中写入任何字符。它工作正常,除了字符 # $ % & (
我试过下面的正则表达式(非常相似)

"^[\\d]$"
"^[\\d]*$"
"^[\\d]+$"
"^[0-9]*$"

有人知道为什么会这样吗?

最佳答案

你的正则表达式没有问题。

问题出在

// 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

关于仅用于数字的 Javascript 正则表达式接受 # $ % & (,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32071078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com