Регулярное выражение для имени, не содержащего соседние точки (.), Дефисы (-) или подчеркивания (_) - PullRequest
0 голосов
/ 04 июня 2018

Я работал над регулярным выражением для имени по следующим критериям:

  1. Содержит только буквы ASCII (a-z, A-Z), цифры (0-9), точки (.), подчеркивания (_) или тире (-)

  2. Начинаются с буквы или цифры и заканчиваются буквой или цифрой

  3. От 3 до 128 символов

  4. Не иметь соседних точек, подчеркиваний или тире.Имена, такие как my-_namespace и my--namespace, недопустимы.

До сих пор я придумал следующий шаблон:

^[a-zA-Z0-9](?!.*--)[a-zA-Z0-9._-]{1,126}[A-Za-z0-9]$

Это работает для соседнихдефис.Как включить функциональность без смежных дефисов, подчеркиваний и точек?

Ответы [ 4 ]

0 голосов
/ 04 июня 2018

Вы можете переборщить с заглядывающими головами и группами без захвата:

  1. Проверьте длину всей строки с положительным заглядыванием.
  2. Проверьте наличие неповторяющихся разделителейс отрицательным взглядом.

^(?=.{3,128})[0-9A-Za-z](?:[0-9A-Za-z]|(?:[-_\.](?![-_\.])))+[0-9A-Za-z]$
       ^           ^            ^            ^       ^            ^
       |           |            |            |       |            |
     Length     Starts      Either a       Or a     but          Ends
     check       with        letter      sepatator  not          with
                letter                            followed      letter
                                                 by another
                                                 separator
0 голосов
/ 04 июня 2018

Попробовать сделать то же самое (?!. * -) с негативным прогнозом с подчеркиванием и точками?Как то так:

^[a-zA-Z0-9](?!.*--)(?!.*\.\.)(?!.*__)[a-zA-Z0-9._-]{1,126}[A-Za-z0-9]$
0 голосов
/ 04 июня 2018

Один из способов - поместить в начало регулярного выражения отрицательный прогноз, запрещающий такие комбинации.

^(?!.*[\._-]{2})[a-zA-Z0-9][a-zA-Z0-9\._-]{1,126}[a-zA-Z0-9]$

Демонстрация отладки

0 голосов
/ 04 июня 2018
^[a-zA-Z0-9]([0-9A-Za-z]|[\._-](?![\._-])){1,126}[a-zA-Z0-9]$

Эта часть избегает повторяющихся символов [\._-](?![\._-])

Таким образом, вы получите чередование между символами, числами и одиночными точками, одиночными подчеркиваниями и одиночными черточками

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...