Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript String.fromCharCode(e.which)不';我不认识点和逗号_Javascript_Jquery_Regex - Fatal编程技术网

Javascript String.fromCharCode(e.which)不';我不认识点和逗号

Javascript String.fromCharCode(e.which)不';我不认识点和逗号,javascript,jquery,regex,Javascript,Jquery,Regex,我使用jQuery为输入掩码创建了一个函数: $.fn.mask = function(regex) { this.on("keydown keyup", function(e) { if (regex.test(String.fromCharCode(e.which))) { return false; } }); } 它根据您传递的正则表达式拒绝任何输入。示例: $("#textfield").mask(/\s/);

我使用jQuery为输入掩码创建了一个函数:

$.fn.mask = function(regex) { 
    this.on("keydown keyup", function(e) {
        if (regex.test(String.fromCharCode(e.which))) {
            return false;
        }
    });
}
它根据您传递的正则表达式拒绝任何输入。示例:

$("#textfield").mask(/\s/); // denies white spaces
$("#textfield").mask(/\D/); // denies anything but numbers
上面的这些示例是有效的,但我尝试使用正则表达式来接受带有十进制分隔符的数字,如下所示:

$("#textfield").mask(/[^\d.,]/); // Anything except digits, dot and comma
那不行。但如果我在控制台上按
时记录
String.fromCharCode(e.which)
,它会显示这些(各自的)字符:
¾和
¼


问题是为什么
String.fromCharCode(e.which)
代表那些字符而不是按下的字符?

您想要处理的是键盘产生的实际字符,而不是按键的布局位置

$.fn.mask = function(regex) { 
    this.on("keypress", function(e) {
        if (regex.test(String.fromCharCode(e.which))) {
            return false;
        }
    });
}
按键
事件报告生成的字符的代码点


您从这些事件中获得的键码是键码,而不是字符码。@请原谅我的无知,但我没有区别。您正在尝试从键码中获取unicode字符,它只在
keypress
处理程序中起作用(不是
keydown
keyup
)。有关详细信息,请参阅。该值标识键盘上的哪个键被按下。考虑“6”键-代码标识密钥,但相同的密钥可能导致“6”或“^”。这只是一个不同的概念。跟进@Pointy的评论,可能会有所帮助。是的,我有这个解决方案。只是等待有人把它贴到马克的正确答案上。非常感谢。