Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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 如何在自动完成上使用正则表达式_Javascript_Regex_Internet Explorer - Fatal编程技术网

Javascript 如何在自动完成上使用正则表达式

Javascript 如何在自动完成上使用正则表达式,javascript,regex,internet-explorer,Javascript,Regex,Internet Explorer,此正则表达式是文本字段中允许字符的白名单。但是,当使用自动完成填充字段时,它不会捕获无效字符 使用末端的垫片,以便IE和Edge能够捕捉numpad无效字符 当自动完成填充时,如何让这个正则表达式捕获无效字符 var validChars = /^[ 0-9a-z\s.#,-]*$/i; var textareas = document.querySelectorAll('.txt'); for(let i = 0; i < textareas.length; i++){ textare

此正则表达式是文本字段中允许字符的白名单。但是,当使用自动完成填充字段时,它不会捕获无效字符

使用末端的垫片,以便IE和Edge能够捕捉numpad无效字符

当自动完成填充时,如何让这个正则表达式捕获无效字符

var validChars = /^[ 0-9a-z\s.#,-]*$/i;
var textareas = document.querySelectorAll('.txt');
for(let i = 0; i < textareas.length; i++){
 textareas[i].addEventListener("paste", function(e){
var clipboardData, pastedData;
// Get pasted data via clipboard API
clipboardData = e.clipboardData || window.clipboardData;
pastedData = clipboardData.getData('Text');
var inputOk = scrub(pastedData);
if(!inputOk){
  e.preventDefault();
}
});
textareas[i].addEventListener("keypress", function(e){
  var inputOk = scrub(e.key);
  if(!inputOk){
    e.preventDefault();
  }
});
}
function scrub(contents)
      {

       if(contents.match(validChars))
         {
          return true;
         }
       else
         {
          alert("Invalid special character entered: " + contents + " ");
          return false;
         }
      }
// KeyboardEvent shim needed for Internet Explorer and Edge. These browsers return non-standard 'key' 
// property values from the numberpad. 
(function() {

  var event = KeyboardEvent.prototype
  var desc = Object.getOwnPropertyDescriptor(event, "key")
  if (!desc) return

  var keys = {

    Multiply: "*",
    Add: "+",
    Divide: "/",
  }

  Object.defineProperty(event, "key", {
    get: function() {
      var key = desc.get.call(this)

      return keys.hasOwnProperty(key) ? keys[key] : key
    },
  })
})()
var validChars=/^[0-9a-z\s.#,-]*$/i;
var textareas=document.querySelectorAll('.txt');
for(设i=0;i
您可以使用将
输入
事件侦听器添加到文本区域,并且仅在输入与正则表达式匹配时才允许输入


var validChars=/^[0-9a-z\s.#,-]*$/i;
var-prevInput=null;
document.querySelector('textarea')。addEventListener(“输入”,函数(e){
如果(!this.value.match(validChars)){
警报(“无效输入!”);
this.value=prevInput?prevInput:“”;
}
prevInput=此值;
});

谢谢!但是,这在总共六个字段中的第一个字段上效果很好,但是它不会在无效字符检测时发出警报。此外,除第一个字段外的任何字段在检测无效字符时也不会清除文本字段内容。警报将弹出打开,但无效内容仍保留。我试着按顺序写“for”循环,但没有成功。有什么我可以更改的吗?@Jupitar您有六个文本区域?是的,但我会有一些页面,其中可能有更多。@Jupitar使用
for
循环遍历所有文本区域并添加相同的事件侦听器。