Разрешать только английские символы и цифры для ввода текста

Live Demo: http://jsfiddle.net/thisizmonster/DveuB/

Как я могу изменить это так, чтобы входные данные позволяли вводить символы A-Z, a-z, 0-9 при наборе текста, не используя регулярное выражение?

Ответ 1

Предполагая, что вы также хотите принять пробелы:

$("#user").keypress(function(event){
    var ew = event.which;
    if(ew == 32)
        return true;
    if(48 <= ew && ew <= 57)
        return true;
    if(65 <= ew && ew <= 90)
        return true;
    if(97 <= ew && ew <= 122)
        return true;
    return false;
});

Если вы не хотите принимать пробелы, удалите if(ew == 32) return true;

JSFiddle

Ответ 2

<input type="text" id="firstName"  onkeypress="return (event.charCode >= 65 && event.charCode <= 90) || (event.charCode >= 97 && event.charCode <= 122) || (event.charCode >= 48 && event.charCode <= 57)" />

Ответ 3

Вы можете сделать что-то вроде этого: http://jsfiddle.net/DveuB/1/

Тогда это только 0-9, a-z и A-Z

$(function(){
    $("#user").keypress(function(event){
        if ((event.charCode >= 48 && event.charCode <= 57) || // 0-9
            (event.charCode >= 65 && event.charCode <= 90) || // A-Z
            (event.charCode >= 97 && event.charCode <= 122))  // a-z
            alert("0-9, a-z or A-Z");
    });
});

Обновление: http://jsfiddle.net/DveuB/4/
Чтобы предотвратить то, о чем говорит @mu:

$("#user").keyup(function(event){
    if (event.altKey == false && event.ctrlKey == false)
        if ((event.keyCode >= 48 && event.keyCode <= 57 && event.shiftKey== false) ||
            (event.keyCode >= 65 && event.keyCode <= 90) ||
            (event.keyCode >= 97 && event.keyCode <= 122))
            alert("0-9, a-z or A-Z");
});

Ответ 4

<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(document).ready(function () {

  $('.clsAlphaNoOnly').keypress(function (e) {  // Accept only alpha numerics, no special characters 
        var regex = new RegExp("^[a-zA-Z0-9 ]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) {
            return true;
        }

        e.preventDefault();
        return false;
    }); 
})
</script>

<body>

<input class='clsAlphaNoOnly' type='text'>
</body>
</html>

Ответ 5

Думайте, что вам нужно написать некоторые операторы if или что-то в этом роде, которые берут код ключа и проверяют его против некоторых чисел, которые представляют другие коды ключей:

например: if(keycode < 80) return false;

Ответ 6

Почему вы делаете это сложно? Используйте регулярное выражение!

Но вместо того, чтобы пытаться декодировать нажатия клавиш, легче в моем опыте посмотреть содержимое текстового поля и удалить все, что вам не нравится.

Использование событий нажатия клавиш приводит вас к сложности превращения клавиш в символы - и, как жить без регулярных выражений, просто нет причин подвергать себя этой боли.

Вместо этого используйте событие onchange, чтобы делать все, что захотите, всякий раз, когда пользователь вносит какие-либо изменения в поле - будь то ввод или копирование и вставка с помощью клавиатуры или мыши. (См., Даже БОЛЬШУЮ сложность, с которой вам придется иметь дело, если вы имеете дело с нажатием клавиши!)

См. эту статью для примера аналогичной задачи - верхний край поля.

http://www.w3schools.com/jsref/event_onchange.asp

(Получение символов в keypress не так уж и трудно, за исключением многих проблем с совместимостью браузера. Использование jQuery или других подобных пакетов может помочь скрыть такие проблемы.

Но я готов поспорить, что там есть пакет, где вы просто задаете регулярное выражение того, что хотите в поле, и он справляется с остальными!)

Ответ 7

Я использую эту функцию.

Изменяя RegExp, вы можете избавиться от любых символов, которые вам не нравятся лично.

$(function(){
    $("#user").bind('keypress',function(e){
        var regex = new RegExp("^[a-zA-Z0-9 ]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) return true;
        e.preventDefault();
        return false;
    });
});