JQuery - проверить символы на нажатие клавиши? - PullRequest
28 голосов
/ 11 мая 2010

У меня есть текстовое поле формы, в которое я хочу разрешить ввод только цифр и букв. (Т. Е. Нет # $ !, и т. Д.). Есть ли способ вызвать ошибку и не дать нажатию клавиши фактически выдать что-либо если пользователь пытается использовать любой символ, кроме цифр и букв? Я пытался найти плагин, но на самом деле не нашел ничего, что делает это ...

Ответы [ 7 ]

35 голосов
/ 11 мая 2010
$('input').keyup(function() {
    var $th = $(this);
    $th.val( $th.val().replace(/[^a-zA-Z0-9]/g, function(str) { alert('You typed " ' + str + ' ".\n\nPlease use only letters and numbers.'); return ''; } ) );
});

EDIT:

Здесь есть и другие хорошие ответы, которые помешают вводу.

Я обновил мой, так как вы также хотели показать ошибку. Замена может принимать функцию вместо строки. Функция запускается и возвращает значение замены. Я добавил alert, чтобы показать ошибку.

http://jsfiddle.net/ntywf/2/

11 голосов
/ 11 мая 2010

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

$("#field").keypress(function(e) {
    // Check if the value of the input is valid
    if (!valid)
        e.preventDefault();
});

Таким образом, письмо не придет в текстовое поле

10 голосов
/ 11 мая 2010
$('#yourfield').keydown(function(e) {
    // Check e.keyCode and return false if you want to block the entered character.
});
6 голосов
/ 10 мая 2012

Я обнаружил, что сочетание проверки нажатия клавиш и нажатия клавиш дает наилучшие результаты. Key up является обязательным, если вы хотите обрабатывать скопированный текст. Это также ловушка для всех кросс-браузерных проблем, которые допускают нечисловые значения в текстовое поле.

    $("#ZipCode").keypress(function (event) {

        var key = event.which || event.keyCode; //use event.which if it's truthy, and default to keyCode otherwise

        // Allow: backspace, delete, tab, and enter
        var controlKeys = [8, 9, 13];
        //for mozilla these are arrow keys
        if ($.browser.mozilla) controlKeys = controlKeys.concat([37, 38, 39, 40]);

        // Ctrl+ anything or one of the conttrolKeys is valid
        var isControlKey = event.ctrlKey || controlKeys.join(",").match(new RegExp(key));

        if (isControlKey) {return;}

        // stop current key press if it's not a number
        if (!(48 <= key && key <= 57)) {
            event.preventDefault();
            return;
        }
    });

$('#ZipCode').keyup(function () {
    //to allow decimals,use/[^0-9\.]/g 
    var regex = new RegExp(/[^0-9]/g);
    var containsNonNumeric = this.value.match(regex);
    if (containsNonNumeric)
        this.value = this.value.replace(regex, '');
});
0 голосов
/ 23 августа 2017
$(document).ready(function() {
 $('.ipFilter').keydown((e) => {
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
        (e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true) || 
          e.keyCode === 67 && (e.ctrlKey === true || e.metaKey === true) ||
          e.keyCode === 86 && (e.ctrlKey === true || e.metaKey === true) ||
          e.keyCode === 82 && (e.ctrlKey === true || e.metaKey === true)) || 
        (e.keyCode >= 35 && e.keyCode <= 40 )) {
             return;
    }
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
        e.preventDefault();
    }
  });
});
0 голосов
/ 20 января 2012

Вышеприведенное расширение jquery (ForceAlphaNumericOnly) является хорошим, но все еще допускает следующие символы через !@#$%^&*()

На моем Mac, когда вы нажимаете клавишу shift (код клавиши 16) и затем 1 , он вводит !, но код клавиши 49, код клавиши для 1.

0 голосов
/ 11 мая 2010

Вы можете попробовать это расширение:

jQuery.fn.ForceAlphaNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;
            // allow backspace, tab, delete, arrows, letters, numbers and keypad numbers ONLY
            return (
                key == 8 || 
                key == 9 ||
                key == 46 ||
                (key >= 37 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 65 && key <= 90) ||
                (key >= 96 && key <= 105));
        })
    })
};

Useage:

$("#yourInput").ForceAlphaNumericOnly();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...