Как взять поле ввода, отфильтровать ввод на основе набора правил и применить к другому полю?

#javascript #jquery #regex

#javascript #jquery #регулярное выражение

Вопрос:

Каков был бы правильный способ выполнить следующее:

Поле ввода для заголовка

Поле ввода для имени пользователя

Правила использования имени пользователя: от 1 до 20 буквенно-цифровых символов, включая подчеркивание («_»), в нижнем регистре

Когда пользователь вводит заголовок типа:

  • Привет, мир
  • Группа пиццы
  • Сумасшедшие !@#!@#!#!# *

поле имени пользователя динамически обновляется по мере того, как пользователь вводит заголовок, форматируя заголовок в соответствии с правилами имени пользователя?

Нужно ли мне какое-то нажатие клавиши с регулярным выражением? Идеи? Спасибо

Ответ №1:

Вы можете выполнить замену регулярных выражений чистым JS. Вы можете использовать jQuery для привязки к событию нажатия клавиши (или любому другому, которое вы пожелаете). Надеюсь, это поможет.

 $("#inputfld").keypress(function() {
  var fldval = $('#inputfld').val();
  $('#inputfld').val(fldval.replace(/[^a-zA-Z0-9_] /g,''));
});
  

Ответ №2:

Следующее удаляет символы, которые не разрешены, и ставит подчеркивания вместо пробелов.

 $(function() {
   $("#title").keyup(function() {
      $("#username").val( $(this).val().replace(/[^A-Za-z0-9_ ]/g,"")
                                       .replace(/ /g, "_") );
   });
});
  

Обратите внимание, что (возможно, зависит от браузера), если вы используете keypress .val() , символ из только что нажатой клавиши не будет включен, поэтому два поля будут немного не синхронизированы. С keyup они останутся синхронизированными, если вы не будете удерживать клавишу нажатой и не дадите ей повториться (хотя, я думаю, вы могли бы перехватить нажатие клавиш, чтобы справиться с этим). и