@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, '' )

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

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

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

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

Войти через центр авторизации
Похожие вопросы