Как запретить пользователю вводить специальные символы в текстовое поле, когда длина равна 0?
У меня есть следующий код, который запрещает пользователю вводить пробел, когда длина равна 0. Теперь, как я могу запретить пользователю вводить все специальные символы (что угодно, кроме az AZ 0-9), когда длина равна 0?
$('#DivisionName').bind('keypress', function(e) {
if($('#DivisionName').val().length == 0){
if (e.which == 32){//space bar
e.preventDefault();
}
}
});
Это мое текстовое поле.
<input type="text" id="DivisionName" />
Ответы
Ответ 1
Диапазоны букв и цифр (включительно):
- 97 - 122 (a-z)
- 65 - 90 (A-Z)
- 48 - 57 (0-9)
Это то, что вы сравниваете e.which
против.
if (e.which < 48 ||
(e.which > 57 && e.which < 65) ||
(e.which > 90 && e.which < 97) ||
e.which > 122) {
e.preventDefault();
}
Или, используя обратную логику:
var valid = (e.which >= 48 && e.which <= 57) || (e.which >= 65 && e.which <= 90) || (e.which >= 97 && e.which <= 122);
if (!valid) {
e.preventDefault();
}
Обновление
Тем не менее, вы все равно можете проверить содержимое поля в целом с помощью регулярного выражения:
if (/^[A-Z0-9]+$/i.test(value)) {
// it looks okay now
}
Или исправить поле, заменив плохие вещи:
var stripped = value.replace(/[^A-Z0-9]+/i, '');
Ответ 2
Это то, что вы ищете:
$('#DivisionName').bind('keypress', function(e) {
if($('#DivisionName').val().length == 0){
var k = e.which;
var ok = k >= 65 && k <= 90 || // A-Z
k >= 97 && k <= 122 || // a-z
k >= 48 && k <= 57; // 0-9
if (!ok){
e.preventDefault();
}
}
});
или смотрите здесь: http://jsfiddle.net/D4dcg/
Ответ 3
Вы можете использовать регулярное выражение для проверки строки.
Что-то вроде ^[a-zA-z0-9].*
Вот статья о тестировании регулярного выражения в javascript
: http://www.w3schools.com/jsref/jsref_regexp_test.asp
И вы даже можете связать событие изменения, а не нажатие клавиши.