Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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_Jquery_Regex_Bind_Keypress - Fatal编程技术网

Javascript 仅限正则表达式字母按键作为事件

Javascript 仅限正则表达式字母按键作为事件,javascript,jquery,regex,bind,keypress,Javascript,Jquery,Regex,Bind,Keypress,我想知道这里有什么问题 $("#city_field").bind({ keypress: function(event){ var regex = /^[a-zA-ZäöüÄÖÜ]/; if (regex.test($("#city_field").val())==true) { $('.r_validation').html('').css('background-color', ''); } else { $('.validation'

我想知道这里有什么问题

$("#city_field").bind({
  keypress: function(event){
    var  regex = /^[a-zA-ZäöüÄÖÜ]/;
    if (regex.test($("#city_field").val())==true) {
    $('.r_validation').html('').css('background-color', '');
    } else {
        $('.validation').html("TEST").css('background-color', 'red');
    }
  }
});
每当我输入字母时,它是有效的,然后当我输入数字时,红色的验证通知就会出现。在这一点上一切都很好,直到我在字母后输入数字。以下内容应无效,但在我当前的脚本中它被视为有效:

  • foo1212
  • foo,
  • foo,[逗号后加空格]
我真正想要验证的是只接受字母和破折号(-),除此之外别无其他

谢谢

编辑

为了记录在案,@Adam rack的最后一条评论解决了这个问题,我最终得到了这个工作代码

$(function(){
  $("#city_field").bind("keyup",
    function(event) {
      var regex = /^[a-zA-ZäöüÄÖÜ]+$/;
      if (regex.test($("#city_field").val())==true) {
        $('.validation').html('').css('background-color', '');
      } else {
          $('.validation').html("TEST").css('background-color', 'red');
      }
  });
});

您的正则表达式只匹配一个字符。您需要将该输入置于Kleene闭包之上,然后放置一个字符串结束标记:

/^[a-zA-ZäöüÄÖÜ]*$/;
或者,如果要确保至少有一个字符,可以使用正闭包:

/^[a-zA-ZäöüÄÖÜ]+$/;
产生:

var r = /^[a-zA-ZäöüÄÖÜ]+$/;

console.log(r.test('Foo'));    //true
console.log(r.test('Foo123')); //false
console.log(r.test('foo,'));   //false 
console.log(r.test('foo, '));  //false
console.log(r.test('foo '));   //false

另外,请确保捕捉到
keyup
事件,因为
keypress
在文本框中的文本更新之前触发,因此您总是在验证后面的一个字符


所以在你的正则表达式上:

/^[a-zA-ZäöüÄÖÜ]/;

测试
Foo123
时会消耗
F
,就是这样。完成了

您的正则表达式只匹配一个字符。您需要将该输入置于Kleene闭包之上,然后放置一个字符串结束标记:

/^[a-zA-ZäöüÄÖÜ]*$/;
或者,如果要确保至少有一个字符,可以使用正闭包:

/^[a-zA-ZäöüÄÖÜ]+$/;
产生:

var r = /^[a-zA-ZäöüÄÖÜ]+$/;

console.log(r.test('Foo'));    //true
console.log(r.test('Foo123')); //false
console.log(r.test('foo,'));   //false 
console.log(r.test('foo, '));  //false
console.log(r.test('foo '));   //false

另外,请确保捕捉到
keyup
事件,因为
keypress
在文本框中的文本更新之前触发,因此您总是在验证后面的一个字符


所以在你的正则表达式上:

/^[a-zA-ZäöüÄÖÜ]/;

测试
Foo123
时会消耗
F
,就是这样。完成了

感谢您的快速回复,但是当我使用此选项时,只要输入一个字符,字符串就不会生效。验证似乎只在输入第二个字符时启动。对不起,我在刷新浏览器之前就发表了评论。没有注意到你编辑的答案。您发布的第二个正则表达式现在可以处理我的第一个注释问题,但是当我按以下顺序输入时:input 1(无效),[backspace]input a(仍然无效,但现在应该改为valid)。为什么?您要输入的确切字符串是什么。你的正则表达式只接受字母。没有数字或退格。我对**退格的意思是键盘上的动作退格。我详细说明了我的操作:我在字段中输入了“1”,出现了红色的验证通知(这是正确的),现在我删除了“1”,然后替换为“a”,红色通知仍然在那里。除非我在字段中输入第二个字符,否则它将被清除。@D-Lo-您想捕捉keyup事件。否则,您的正则表达式将不会使用最新的文本框值进行测试:感谢您的快速回复,但是当我使用它时,每当我只输入一个字符时,字符串将不会验证。验证似乎只在输入第二个字符时启动。对不起,我在刷新浏览器之前就发表了评论。没有注意到你编辑的答案。您发布的第二个正则表达式现在可以处理我的第一个注释问题,但是当我按以下顺序输入时:input 1(无效),[backspace]input a(仍然无效,但现在应该改为valid)。为什么?您要输入的确切字符串是什么。你的正则表达式只接受字母。没有数字或退格。我对**退格的意思是键盘上的动作退格。我详细说明了我的操作:我在字段中输入了“1”,出现了红色的验证通知(这是正确的),现在我删除了“1”,然后替换为“a”,红色通知仍然在那里。除非我在字段中输入第二个字符,否则它将被清除。@D-Lo-您想捕捉keyup事件。否则,您的正则表达式将不会使用最新的文本框值进行测试: