Входной фильтр jQuery для текстовой области - PullRequest
3 голосов
/ 08 декабря 2011

Я адаптировал это решение в свой скрипт. Идея состоит в том, чтобы запретить пользователю вводить неавторизованные символы (конечно, есть и фильтр на конце).

$('#someinput').keyup(function() {
    var $th = $(this);
    $th.val( $th.val().replace(/[^a-zA-Z0-9]/g, function(str) {
        console.log(str);
        return '';
    }))
})

Это хорошо работает, но мне также нужно, чтобы пользователи могли набирать определенные разрешенные символы, такие как:.,!? -? символы специального языка.

Что на самом деле нужно пропустить: @ # $% ^ & * () = _ + "':; / <> \ | {} []

Есть идеи? Спасибо!

Решение благодаря Майкл

//query
$('#someinput').keyup(function() {
    var $th = $(this);
    $th.val($th.val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';}));
}).bind('paste',function(e) {
    setTimeout(function() {
        $('#someinput').val($('#someinput').val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';}));
        $('#someinput').val($('#someinput').val().replace(/\s+/g,' '));
    },100);
});

Ответы [ 2 ]

5 голосов
/ 08 декабря 2011

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

$th.val( $th.val().replace(/\s?[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g, ""));
// Edit: added optional \s to replace spaces after special chars

Обратите внимание, что некоторые из них необходимо экранировать с помощью обратной косой черты внутри [] класса символов: \\\[\]\^\/

3 голосов
/ 08 декабря 2011

Если я понимаю, что вы хотите сделать, не могли бы вы просто добавить этих нежелательных символов в свое регулярное выражение вместо [^a-zA-Z0-9]?

Замените это на [@#\$%\^&\*\(\)=_\+"':;\/<>\\\|\{\}\[\]] (обратите внимание напобег)

...