Это то, что я сделал в другой раз только для чисел, оно также разрешит все форматеры.
jQuery
$('input').keypress(function(e) {
var a = [];
var k = e.which;
for (i = 48; i < 58; i++)
a.push(i);
if (!(a.indexOf(k)>=0))
e.preventDefault();
});
Попробуйте
http://jsfiddle.net/zpg8k/
Как примечание, вы захотите фильтровать также на стороне отправки / сервера, для вставки / контекстного меню и браузеров, которые не поддерживают событие вставки.
Изменить наподробнее о нескольких методах
Я вижу, что вы пытаетесь найти «принятый» ответ, поэтому я кое-что проясню.Вы действительно можете использовать любой из перечисленных здесь методов, все они работают.Что я лично сделаю, так это использую мою для живой фильтрации на стороне клиента, а затем на стороне отправки и на стороне сервера использую RegEx, как это предлагают другие.Однако никакая клиентская сторона сама по себе не будет на 100% эффективна , поскольку ничто не мешает мне поместить document.getElementById('theInput').value = 'Hey, letters.';
в консоль и обойти любую проверку на стороне клиента (за исключением опроса, но я мог бы просто отменить setInterval
с консоли тоже).Используйте любое решение на стороне клиента, которое вам нравится, но убедитесь, что вы внедрили что-то и на стороне отправки, и на стороне сервера.
Редактировать 2 - @Tim Down
Хорошо, в соответствии с комментариями мне пришлось настроить двавещи, о которых я не думал.Во-первых, нажатие клавиши вместо keydown, которая была обновлена, но отсутствие indexOf в IE (серьезно Microsoft !?) также нарушает приведенный выше пример.Вот альтернатива
$('input').keypress(function(e) {
var a = [];
var k = e.which;
for (i = 48; i < 58; i++)
a.push(i);
if (!($.inArray(k,a)>=0))
e.preventDefault();
});
Новый jsfiddle: http://jsfiddle.net/umNuB/