Мне нужно написать регулярное выражение на JavaScript, которое будет проверять различные форматы Distinguished Name (DN). Я пытался создать свое, но оно работает не очень хорошо.
Как правильно написать регулярное выражение для валидации всех возможных вариантов Distinguished Name? Буду благодарен за помощь с корректным паттерном.
я недавно делал то же самое и наткнулся на эту проблему. DN содержит пробелы и спецсимволы, так что обычные регулярки не катят. Использовал /^[A-Z]{1,4}=[^,]+(,[A-Z]{1,4}=[^,]+)*$/i - здесь атрибуты до 4 символов (как MAIL), а значения любые кроме запятой. Но помни - в реальности DN может содержать экранированные запятые и кавычки, так что для продакшена лучше взять готовую библиотеку.
Твой паттерн слишком простой. DN имеет четкую структуру - атрибут=значение, разделенные запятыми. Попробуй ^([A-Z]{1,2}=[^,=]+)(,[A-Z]{1,2}=[^,=]+)*$. Этот регекс проверяет, что каждый компонент начинается с 1-2 заглавных букв (CN, O, C, OU), потом идет знак равенства и значение без запятых. Не забудь ^ и $ для проверки начала и конца строки. Сам использовал похожий подход в корпоративных проектах.
А зачем писать с нуля? DN регулярки - это боль из-за экранирования и кучи стандартов. Возьми ldapjs или сделай простой парсер. Или тебе конкретно regex нужен?