2012-01-13 38 views
1

我想知道这里似乎是什么问题。正则表达式只能作为事件的按键

$("#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
  • 富,
  • 富, [用逗号后的空间]

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

谢谢。

编辑

为了记录在案,@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'); 
     } 
    }); 
}); 

回答

4

你的正则表达式只匹配一个字符。你需要把该输入过克莱尼关闭,然后把字符串结束标记进行:

/^[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äöüÄÖÜ]/; 

当测试Foo123F会被消耗掉,这就是它。完成。

+0

感谢您的快速回复,但是当我使用这个字符串不会验证每当我只输入一个字符。验证似乎只在第二个字符的输入时被解雇。 – 2012-01-13 05:42:07

+0

一个字符适合我http://jsfiddle.net/653Lu/1/ – 2012-01-13 05:44:55

+0

对不起,我甚至在刷新浏览器之前评论过。没有注意到你编辑的答案。你现在发布的第二个正则表达式现在适用于我的第一个评论问题,但是当我按照以下顺序输入时:输入1(无效),[退格]输入一个(仍然无效,但现在应该更改为有效)。这是为什么? – 2012-01-13 05:46:38