2013-12-07 2 views
0

Как удалить все строки, буквы и дефисы из строки с помощью jQuery?jQuery разрешает только числа, буквы и дефисы

Я нашел этот код, который позволяет использовать только буквенно-цифровые символы, но я не уверен, как бы я хотел добавить дефис.

$('#text').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; 
}); 

ответ

-1

Я думаю, вы можете просто положить дефис в квадратные скобки.

"^[a-z A-Z 0-9 -]+$" 
+5

Вы должны избежать этого, в противном случае он будет пытаться обнаружить диапазон (например, 'az':' "^ [a-zA-Z0-9 \ -] + $" '. Кроме того, добавление пробелов позволит пробелы. – Sylvain

+0

@Peter Я действительно ожидал обновления этого ответа, поэтому я сделал сам (с некоторыми дополнениями) – Sylvain

5

Вы просто должны изменить регулярное выражение для этого: "^[a-zA-Z0-9\-]+$".

Обратите внимание, что дефис экранирован с помощью \, в противном случае он используется для указания диапазона, как a-z (символы от a до z).

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

// The function you currently have 
$('#text').keypress(function (e) { 
    var allowedChars = new RegExp("^[a-zA-Z0-9\-]+$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (allowedChars.test(str)) { 
     return true; 
    } 
    e.preventDefault(); 
    return false; 
}).keyup(function() { 
    // the addition, which whill check the value after a keyup (triggered by Ctrl+V) 
    // We take the same regex as for allowedChars, but we add^after the first bracket : it means "all character BUT these" 
    var forbiddenChars = new RegExp("[^a-zA-Z0-9\-]", 'g'); 
    if (forbiddenChars.test($(this).val())) { 
     $(this).val($(this).val().replace(forbiddenChars, '')); 
    } 
}); 
1

Поскольку существует так много внимания уделялось включению дефиса в класс символов среди этих ответов, и поскольку я не мог легко найти эту информацию в Googling, я думал, что добавлю, что дефис не нужно экранировать, если это первый символ в класс спецификация. В результате, следующий класс символов будет работать, а также указать дефис в дополнение к другим персонажам:

[-a-zA-Z0-9] 
+0

Обратите внимание, что его также нормально помещать неопределенный дефис в конце класса char. – ridgerunner

+0

@Ridgerunner Это дает мне ошибку для меня. Можете ли вы привести пример и версию Ruby, которую вы используете? –

+1

Этот вопрос есть. работа с JavaScript. – ridgerunner

Смежные вопросы