ScarletFlash
@ScarletFlash

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

Всем привет.

Задача такая: в input-поле заносим либо IP, либо URL. Нужно их валидировать, для чего я решил воспользоваться регулярными выражениями, вынеся их в отдельный файл, чтобы ими было удобнее управлять.

В файл сейчас записано следующее:
const urlPattern = '^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$';
const ipPattern =
    '^(1?\d{1,2}|2[0-4]\d|25[0-5])\.' +
    '(1?\d{1,2}|2[0-4]\d|25[0-5])\.' +
    '(1?\d{1,2}|2[0-4]\d|25[0-5])\.' +
    '(1?\d{1,2}|2[0-4]\d|25[0-5])\/?(\b|\/32)$';

export const urlPatternExp: RegExp = new RegExp(urlPattern);
export const ipPatternExp: RegExp = new RegExp (ipPattern);
export const ipOrUrlPatternExp: RegExp = new RegExp (`(${urlPattern})|(${ipPattern})`, 'g');

(ipPattern расписан так, чтобы линтер не ругался на длину строки.)

Идея в том, чтобы сформировать наборы паттернов, в различных конфигурациях собрать их в регулярные выражения, и использовать во всем приложении.

На regEx101 (в режиме JS), происходит 2 полных совпадения. Можете сами попробовать:
(^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$)|(^(1?\d{1,2}|2[0-4]\d|25[0-5])\.(1?\d{1,2}|2[0-4]\d|25[0-5])\.(1?\d{1,2}|2[0-4]\d|25[0-5])\.(1?\d{1,2}|2[0-4]\d|25[0-5])\/?(\b|\/32)$)
  • name.com
  • 192.168.1.1


В приложении используется Angular. В реактивных формах валидация прописана так:
url: [
            '',
            [ Validators.required, Validators.pattern(ipOrUrlPatternExp) ]
      ],


При ручном тестировании формы в приложении, name.com валидацию проходит, а 192.168.1.1 выдает ошибку.
Буду бесконечно признателен, если подскажете, почему.

UPD.: Решение в комментарии к вопросу.
  • Вопрос задан
  • 2815 просмотров
Пригласить эксперта
Ответы на вопрос 1
@PloAl
Возможно оператор или || некорректно написан.
export const ipOrUrlPatternExp: RegExp = new RegExp (`(${urlPattern})|(${ipPattern})`, 'g');
Ответ написан
Ваш ответ на вопрос

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

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