Дал регулярное выражение для разрешения только алфавитов и пробелов, но оно не проверяется для цифровой клавиатуры

#javascript #html #css #regex #validation

Вопрос:

Хотя я дал регулярное выражение для названия его разрешенных номеров цифровых панелей. Аналогичная проблема в поле номер мобильного телефона, в нем разрешены специальные символы, хотя я привел регулярное выражение. Почему это не работает? Любая помощь будет признательна

 let namecheck = false;
let mobcheck = false;
$("#fname").keydown(function (ev) {

        var namekey = String.fromCharCode(ev.which);

        var input = this.value
        var prev = input.length - 1
        let nameregex = /^[A-Za-z ]$/

        if (ev.which != 8 amp;amp; ev.which != 46) {                 //to allow backspace and del
            if (!nameregex.test(namekey) || (input[prev] == " " amp;amp; namekey == " ")) {
                ev.preventDefault();
            }
        }

        if (input.length < 2) {
            namecheck = false
            $("#error1").text("Enter at least 3 characters")
        }
        else {
            $("#error1").text("")
            namecheck = true
        }
    })

    $("#fmob").keydown(function (ev) {

        let mobkey = String.fromCharCode(ev.which)
        let mob = this.value;
        let mobregex = /^[0-9]$/
        if (ev.which != 8 amp;amp; ev.which != 46) {                 //to allow backspace and del
            if (!mobregex.test(mobkey)) {
                ev.preventDefault()
            }
        }

        if (mob.length < 9) {
            $("#error2").text("Mobile number should be at least 10 digits")
            mobcheck = false
        }
        if (mob.length == 9) {
            $("#error2").text("")
            mobcheck = true
        }
        if (mob.length == 10) {
            if (ev.which != 8 amp;amp; ev.which != 46) {
                ev.preventDefault()
            }
        }


    })
})
 

Комментарии:

1. [a-zA-Zs] это регулярное выражение предназначено только для сопоставления букв и пробелов.

2. @DedaDev Я сравниваю каждый ключ во время keydown (), вот почему я опустил знак» «. Но я тоже пытался это сделать, результат тот же. Это позволяет по какой-то причине использовать цифровые номера

Ответ №1:

Выражение регулярного выражения, похоже, не помешает numpad. Я бы посоветовал вам проверить коды с 96 по 105, если вы хотите заблокировать 0-9 на цифровой панели.

Предотвратить цифровую панель:

   if (ev.which >= 96 amp;amp; ev.which <= 105) {
     ev.preventDefault();
  }
 

Используйте event.key для получения фактического ключа, чтобы номер регулярного выражения не принимал буквы или специальные символы.

   const key = ev.key
  const numberReg = /^[0-9]$/
  if(!numberReg.test(key)){
      // prevent letters and special cahracters
      ev.preventDefault()
  }
 

Комментарии:

1. Да, это работает для того, чтобы не разрешать цифровую панель в поле имя. Спасибо. Но я также сталкиваюсь с аналогичной и странной проблемой с регулярным выражением, позволяющим использовать только цифровые клавиши. Я дал [0-9] для этого, но он также позволяет использовать специальные символы над клавишами 0-9 на клавиатуре. У вас тоже есть какие-нибудь предложения по этому поводу? Потому что для некоторых символов, таких какamp;, нет кодов ключей. Я удивляюсь, почему не так много людей спрашивают об этом

2. Используйте event.key его, чтобы вы могли правильно проверить номер регулярного выражения, и это должно решить вашу проблему. Я обновил ответ, включив его в качестве решения проблемы, с которой вы столкнулись с цифрами и специальными символами.

3. Огромное спасибо!! Это на самом деле все исправило

4. Классно! Рад, что смог помочь!