Вы просто должны изменить регулярное выражение для этого: "^[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, ''));
}
});
Вы должны избежать этого, в противном случае он будет пытаться обнаружить диапазон (например, 'az':' "^ [a-zA-Z0-9 \ -] + $" '. Кроме того, добавление пробелов позволит пробелы. – Sylvain
@Peter Я действительно ожидал обновления этого ответа, поэтому я сделал сам (с некоторыми дополнениями) – Sylvain