Иногда написание регулярного выражения может быть почти такой же сложной задачей, как поиск имени пользователя. Но здесь вы были достаточно близко, чтобы заставить это работать. Я могу указать на три причины, по которым ваша попытка не удалась.
Прежде всего, нам нужно сопоставить всю входную строку, а не только ее часть, потому что мы не хотим игнорировать такие вещи, как пробелы и другие символы, которые появляются на входе. Для этого обычно используются якоря ^
(начало совпадения) и $
(конец совпадения) соответственно.
Еще один момент заключается в том, что нам нужно предотвратить появление двух специальных символов рядом друг с другом. Лучше всего это сделать с негативным прогнозом.
Наконец, я вижу, что инструмент, который вы используете для проверки своего регулярного выражения, добавляет флаги gmi
, а это не то, что нам нужно. В частности, флаг i
говорит, что регулярное выражение должно быть без учета регистра, поэтому оно должно совпадать с заглавными буквами, такими как маленькие. Уберите этот флаг.
Последнее регулярное выражение выглядит следующим образом:
/^([a-z0-9]|[-._](?![-._])){4,20}$/
Здесь нет ничего действительно крипти c, кроме, возможно, для группы [-._](?![-._])
что означает любой из -._
, за которым не следует ни один из -._
.