2012-01-13 31 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