кто-то в нём хорошо разбирается, подскажите, пожалуйста:
                  
                  
                  
                  
                  
                  Хочу с помощью регекспа проверять юзернейм пользователя. Требования такие:
                  
                  
                  
                  
                  
                  - Длина от 4 до 32 символов
                  
                  
                  - Может содержать буквы латинского алфавита, цифры 0-9 и знак точки и/или нижнего подчёркивания (но не в начале и не в конце)
                  
                  
                  - Подряд не может быть 2 и более знака нижнего подчёркивания и/или точки
                  
                  
                  
                  
                  
                  Например следующие вариант будут валидны: 
                  
                  
                  
                  
                  
                  username
                  
                  
                  user.name
                  
                  
                  user_name
                  
                  
                  
                  
                  
                  А следующие уже не должны проходить проверку: 
                  
                  
                  
                  
                  
                  _username
                  
                  
                  .username
                  
                  
                  username_
                  
                  
                  username.
                  
                  
                  user..name
                  
                  
                  user__name
                  
                  
                  user._name
                  
                  
                  user_.name
                  
                  
                  
                  
                  
                  Есть вот такой регексп: ^(?=.{4,32}$)(?![_.])[a-zA-Z0-9._]+(?<![_.])$
                  
                  
                  
                  
                  
                  Не пойму, как в нём указать, чтобы символы точки или нижнего подчёркивания не могли стоять подряд. Возможно ли это вообще или проще написать отдельную функцию, которая будет проверять на соседство символов?
                  
                  
                
Look ahead / look behind Но я бы не стал проверять такое регуляркой. Лучше просто алгоритм написать. Он не сложный будет.
Продерживаю https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Это один из аргументов против Второй аргумент – тяжело понять что происходит. Я не встречал пока лично таких разработчиков, которые бы с первого взгляда поняли регулярку, в отличие от шаблона. Ну и третий аргумент — тяжело поддерживать. Он вытекает из второго. Если поменяются требования к проверке поля, то придётся всю регулярку переписывать.
Обсуждают сегодня