如何使用正则表达式检测CTRL + C和CTRL + V键?

时间:2014-02-28 10:41:16

标签: javascript regex

我已经在我的JavaScript中使用正则表达式阻止了我的文本字段的所有aTOz字符输入但是因为我阻止了整个字母表,所以我无法执行 CTRL + C CTRL + V , 这是我的正则表达式:

var reValidChars = /[\x08\x0D\d]/;
iKeyCode = objEvent.charCode;
strKey = String.fromCharCode(iKeyCode); 
if (!reValidChars.test(strKey)) {
    return false;
}

你能帮我解决这个问题。 提前致谢

3 个答案:

答案 0 :(得分:13)

使用RegExp无法检测按键,但您可以按照以下步骤操作:

document.body.addEventListener("keydown",function(e){
    e = e || window.event;
    var key = e.which || e.keyCode; // keyCode detection
    var ctrl = e.ctrlKey ? e.ctrlKey : ((key === 17) ? true : false); // ctrl detection

    if ( key == 86 && ctrl ) {
        console.log("Ctrl + V Pressed !");
    } else if ( key == 67 && ctrl ) {
        console.log("Ctrl + C Pressed !");
    }

},false);

JSFiddle

答案 1 :(得分:0)

使用paste事件在剪贴板粘贴时执行操作。

请注意,用户可以通过多种方式将内容添加到文本框中!

  • 输入
  • 自动填充(不会在所有浏览器中触发关键事件)
  • 通过菜单粘贴
  • 通过键盘快捷键粘贴
  • 拖动&删除其他程序中突出显示的文本

因此,您不必仅在键盘输入(keyup)上捕获内容,而是需要将它们捕获到实际的粘贴级别和其他事件中!这意味着您可能还需要观察任何或所有这些事件,具体取决于您的情况:

答案 2 :(得分:0)

如果要检测复制和粘贴到控件,则应使用控件事件而不是regexp。

document.addEventListener('copy', function(e){
    e.clipboardData.setData('text/plain', 'Hello, world!');
    e.clipboardData.setData('text/html', '<b>Hello, world!</b>');
    e.preventDefault(); // We want to write our data to the clipboard, not data from any user selection
});

document.querySelector('textarea').addEventListener('paste', (e) => {
  console.log(e);
});