0

我在网上和这里阅读了一些关于堆栈溢出的答案,但我没有找到解决方案。

我试图阻止用户将无效字符(除 az AZ 字符之外的任何字符)复制粘贴到我的输入字段中。我不想在提交时这样做,而是在复制粘贴事件时这样做。

如果我复制包含所有无效字符(如' 1234')的粘贴文本,我的 if 块将被执行(正则表达式测试失败)并且工作正常。

12abc但是,如果我复制的文本包含有效或无效字符(如“ ”或“ ”)的混合,则它不起作用abc12

如何防止用户将包含无效字符的文本复制粘贴到我的输入文本中?

我在输入文本元素上调用我的javascript函数,如下所示:

function validatePaste(e) {
  var regex = /[a-z]/gi;
  var copiedText = e.clipboardData.getData('text')
  console.log(copiedText,regex.test(copiedText) )
  if (!regex.test(copiedText)) {
    e.preventDefault(); //this line executes only if copiedText has all invalid characters
    return false;
  }
}
<input type="text" onpaste="validatePaste(event)">

4

2 回答 2

1

你只测试那里有一个字符

这是一个更好的正则表达式 - 我们也不需要每次都分配它

const regex = /^[a-z]+$/gi; // gi makes A-Z irrelevant

function validatePaste(e) {
  const copiedText = e.clipboardData.getData('text')
  console.log(copiedText, regex.test(copiedText))
  if (!regex.test(copiedText)) {
    e.preventDefault(); //this line executes if copiedText has any invalid characters
    return false;
  }
}
<input type="text" onpaste="validatePaste(event)">

于 2021-05-14T17:22:43.270 回答
1

参考:

字符类([...])、锚点(^ 和 $)、重复(+、*)

/ 只是分隔符,它表示正则表达式的开始和结束。一种用途是现在您可以在其上使用修饰符。

function validatePaste(e) {
  var regex = /^[a-zA-Z]*$/;
  var copiedText = e.clipboardData.getData('text')
  if (!regex.test(copiedText)) {
    e.preventDefault(); //this line executes only if copiedText has all invalid characters
    return false;
  }
}
<input type="text" onpaste="validatePaste(event)">

于 2021-05-14T17:23:24.650 回答