Нужна помощь в регулярном выражении

#javascript #regex

Вопрос:

Будет ли этот код блокировать $ % # или ( как я печатаю?

 var digitsOnly = /[0-9]/g;
var emailOnly = /[a-zA-Z0-9_.@-]/g;
var alphaOnly = /[a-zA-Z]/g;
var dateOnly = /[0-9/]/g;

function restrictKeys(myfield, e, restrictionType) {

    if (!e) var e = window.event
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
    var character = String.fromCharCode(code);

    // if they pressed esc... remove focus from field...
    if (code==27) { this.blur(); return false; }

    // ignore if they are press other keys
    // strange because code: 39 is the down key AND ' key...
    // and DEL also equals .
    if (!e.ctrlKey amp;amp; code!=9 amp;amp; code!=8 amp;amp; code!=36 amp;amp; code!=37 amp;amp; code!=38 amp;amp; (code!=39 || (code==39 amp;amp; character=="'")) amp;amp; code!=40) {
        if (character.match(restrictionType)) {
            return true;
        } else {
            return false;
        }

    }
}
 

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

1. Я думаю, что вам следует просто попробовать это.

2. Ваше выражение электронной почты нуждается в некоторой доработке

3. Я пробовал, но этот код не блокирует символы, о которых я упоминал.

4. Попробуйте повторить код, который вы получаете с каждым ключом. Используйте предупреждение()

5. @austinbv Я знаю, что это будет что-то вроде этого /^[a-zA-Z0-9._ -] @[a-zA-Z0-9. -] . [a-zA-Z]{2,4}$/ (хотя это не самый лучший вариант), но он не работает так, как соответствует шаблону при вводе… Спасибо.

Ответ №1:

Будет ли этот код блокировать $ % # или ( как я печатаю?

Нет. Обнаружение нажатых клавиш бесполезно, пользователи могут вставлять или перетаскивать текст в элементы управления формами, чтобы коды клавиш не совпадали с вводимым текстом (или вообще не запускали ключевое событие). Кроме того, вы заботитесь о ценности только при отправке формы, какая бы ценность она ни имела в то же время, для вас это не имеет значения.

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