正则表达式只将按键作为事件

时间:2012-01-13 05:36:07

标签: 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').html("TEST").css('background-color', 'red');
    }
  }
});

每当我输入字母时它是有效的,那么当我输入数字时,会出现红色验证通知。此时一切都很好,直到我在信件后输入数字。以下内容应无效,但在我当前的脚本中,它被视为有效:

  • foo1212
  • FOO,
  • foo, [逗号后用空格]

我真正想验证的是,只接受字母和短划线( - ),除此之外别无其他。

感谢。

修改

为了记录,@ Adam Rackis的最后评论解决了这个问题,我最终得到了这个有效的代码。

$(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');
      }
  });
});

1 个答案:

答案 0 :(得分:4)

你的正则表达式只匹配一个字符。您需要将该输入放在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

DEMO

ALSO ,请确保您抓住keyup事件,因为keypress在文本框中的文字更新之前触发了,所以你是总是验证背后的一个角色。


所以你的正则表达式:

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

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