Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 允许字母数字和连字符不断返回false的正则表达式测试_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 允许字母数字和连字符不断返回false的正则表达式测试

Javascript 允许字母数字和连字符不断返回false的正则表达式测试,javascript,jquery,regex,Javascript,Jquery,Regex,我试图通过键入或粘贴的输入,使用jQuery和regex禁用某些值的输入(任何不是字母数字或连字符的内容都应返回false,并且e.preventDefault()被调用以停止输入)。每次我运行这个测试时,不管输入是什么,它都会返回false而失败,我无法找出我在这里做错了什么 当我在节点控制台valid.test(“hello world”)(或等于“hello world”的变量)中运行测试时,它返回为true,当我执行valid.test(“hello\u world”)时,它返回为fal

我试图通过键入或粘贴的输入,使用jQuery和regex禁用某些值的输入(任何不是字母数字或连字符的内容都应返回false,并且
e.preventDefault()
被调用以停止输入)。每次我运行这个测试时,不管输入是什么,它都会返回false而失败,我无法找出我在这里做错了什么

当我在节点控制台
valid.test(“hello world”)
(或等于“hello world”的变量)中运行测试时,它返回为true,当我执行
valid.test(“hello\u world”)
时,它返回为false,但当我使用下面的代码执行测试时,无论输入如何,每次都返回为false

我的代码:

jQuery('#input').on('keydown paste', function(e) {
  var input = e.target.value;
  var isValid = /^[a-zA-Z\d-]+$/;
  var tester = isValid.test(input);

  if (tester === false) {
    e.preventDefault();
    console.log("Input allowed? " + tester);
  } else if (tester) {
      console.log("Input allowed? " + tester);
  }
});
在节点控制台中,我得到以下结果:

"hello-world" = true
"hello_world" = false
"hello." > false
"goodness gracious" = false
"goodness-gracious" = true
"goodness123" = true
"goodness!!" = false
我错过了什么

编辑:我创建了一个代码笔来显示我得到的结果:

您需要转义字符类中的
-
。因此,您的正则表达式将是
/^[a-zA-Z\d\-]+$/

var data=[“你好世界”,“你好世界”,“你好”,“善良仁慈”,“善良仁慈”,“善良123”,“善良!!”],
结果=data.map(word=>/^[a-zA-Z\d\-]+$/.test(word));

控制台日志(结果)
您需要在character类中转义
-
。因此,您的正则表达式将是
/^[a-zA-Z\d\-]+$/

var data=[“你好世界”,“你好世界”,“你好”,“善良仁慈”,“善良仁慈”,“善良123”,“善良!!”],
结果=data.map(word=>/^[a-zA-Z\d\-]+$/.test(word));

控制台日志(结果)
您需要分离
按键
粘贴
的逻辑,因为
e.preventDefault()
是导致您出现问题的原因。使用与中相同的逻辑,可以针对粘贴的输入进行测试

let r=/^[a-zA-Z\d-]+$/
$(“#输入”).bind({
向下键:功能(e){
返回r.测试(e.键)
},
粘贴:函数(e){
if(!r.test(e.originalEvent.clipboardData.getData('text')){
e、 预防默认值()
}
}
});

您需要分离
按键
粘贴
的逻辑,因为
e.preventDefault()
是导致您出现问题的原因。使用与中相同的逻辑,可以针对粘贴的输入进行测试

let r=/^[a-zA-Z\d-]+$/
$(“#输入”).bind({
向下键:功能(e){
返回r.测试(e.键)
},
粘贴:函数(e){
if(!r.test(e.originalEvent.clipboardData.getData('text')){
e、 预防默认值()
}
}
});

对于这两个事件,您将在输入值出现在内容中之前获取输入值

对于“粘贴”事件,您可以使用

$("#textareaid").bind("paste", function(e){
    // access the clipboard using the api
    var pastedData = e.originalEvent.clipboardData.getData('text');
    alert(pastedData);
} );
有关更多参考,请参阅


有了“keydown”,类似于ctwheels的答案可能会起作用。

对于这两个事件,在输入值出现在内容中之前,您将获得输入值

对于“粘贴”事件,您可以使用

$("#textareaid").bind("paste", function(e){
    // access the clipboard using the api
    var pastedData = e.originalEvent.clipboardData.getData('text');
    alert(pastedData);
} );
有关更多参考,请参阅


使用“keydown”,类似ctwheels的答案可能会起作用。

问题是由
e.preventDefault()
引起的。您可以在这里看到输入为空。
e.preventDefault()
导致了问题。您可以在这里看到输入是空的。这在节点控制台中似乎工作得很好,但当我通过jquery运行它时,它就不再工作了。我在我的主要帖子中更新了我的代码笔,以使用您的正则表达式示例,但每次通过jquery.Comment e.preventDefault并重试时,它似乎都返回false。连字符与此无关,无法工作。连字符按字面解释。此外,这并不能解决问题,因为问题不是正则表达式,而是与
e.preventDefault
相结合的事件。这似乎在节点控制台中工作得很好,但当我通过jquery运行它时,它就不再工作了。我在我的主要帖子中更新了我的代码笔,以使用您的正则表达式示例,但每次通过jquery.Comment e.preventDefault并重试时,它似乎都返回false。连字符与此无关,无法工作。连字符按字面解释。此外,这并不能解决问题,因为问题不是正则表达式,而是与
e.preventDefault
相结合的事件。我只是在修改我的答案。真有趣,你和我的想法完全一样!虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面更改,仅链接的答案可能会无效。我只是在更改我的答案。真有趣,你和我的想法完全一样!虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面更改,仅链接的答案可能会无效。谢谢,这就是解决方案。我从来没有怀疑过这是罪魁祸首!谢谢你,这就是解决办法。我从来没有怀疑过这是罪魁祸首!