регулярное выражение только нажатие клавиш в качестве события - PullRequest
1 голос
/ 13 января 2012

Интересно, в чем здесь проблема?

$("#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 Ответ

4 голосов
/ 13 января 2012

Ваше регулярное выражение соответствует только одному символу. Вам нужно поместить этот ввод поверх замыкания Клини, затем поставить маркер конца строки:

/^[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

ТАКЖЕ , убедитесь, что вы перехватываете событие keyup, так как keypress запускает до текста в вашем текстовом поле, поэтому вы всегда проверяете один символ позади.


Итак, на вашем регулярном выражении:

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

При тестировании Foo123 будет потребляться F, и все. Готово.

...