@KononovD

Как передать регулярное выражение в атрибут pattern инпута?

Добрый вечер, у меня есть компонент инпута. В этом классе есть поле со всеми нужными мне регулярными выражениями:
regexp = {
    username: /^[a-zа-я0-9_-]{2,16}$/,
    password: /^.{6,18}$/,
    email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
    noRegexp: /./
  }


дальше я беру эти регулярки и вставляю их в атрибут pattern инпута:

<input
          ...={ ... }
          pattern={ this.regexp[regexpName].toString().replace( /\//g, '' ) }
          ...={ ... }
        />

Насколько я понимаю, pattern принимает строку, а не регулярку. отсюда .toString(), а потом методом тыка выяснилось, что с обратными слешами, первым и последним, регуляки не работают ( поле всегда выдает ошибку ), отсюда .replace( /\//g, '' )

И вот я хочу узнать как быть, если у меня в самом регулярном выражении есть обратные слеши? Может написать регулярку, которая будет убирать только первый и последнии слеши?
Подскажите.
Спасибо
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
Может написать регулярку, которая будет убирать только первый и последнии слеши?

Зачем такие сложности? Вы знаете, что лишними в строке являются первый и последний символы - ну так может, их и отрезать? - типа, .slice(1, -1).

Ну и если вдруг объект regexp используется только для задания значений атрибута pattern, то пусть его свойства будут сразу строками, а не регулярными выражениями. И ещё, зачем делать его обычным полем класса? - так будет создаваться отдельный объект для каждого экземпляра. Пусть будет статическим или вообще не принадлежит классу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы