Вам необходимо проверить регулярное выражение по отношению к значению после применения изменения с actualChar
.
$(function() {
$('#input-tags').on('keypress', function(e) {
// we can skip the regex test for these cases
if (e.keyCode === 13) {
return true;
} // 13 is enter
if (e.keyCode === 9) {
return true;
} // 9 is tab
let actualChar = String.fromCharCode(e.keyCode);
// Get tag value from input
let tag = $(this).val();
// the result after the key is pressed
let result = tag.substr(0, e.target.selectionStart) + actualChar + tag.substr(e.target.selectionEnd);
// Pattern for ignore special characters
return /^[A-Za-z0-9]+[ ]?[A-Za-z0-9]*$/.test(result); //return true if not exists special chars, else false
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="input-tags">
- Поместите специальные случаи, которые всегда возвращают
true
в начале. - Получите вход
actualChar
и текущийзначение входа tag
. - Создайте результат, заменив выделение (см. пример изображения ниже).
- Убедитесь, что результат соответствует шаблону.Если нет, верните false и проигнорируйте ввод.
Обратите внимание, что, так как возможно поставить пробел между словами, которые вы можете закончитьдо значения, заканчивающегося единицей.
Чтобы справиться с этим, вам нужно trim
значение перед его использованием.