подтвердите имя пользователя с помощью регулярного выражения в javascript - PullRequest
1 голос
/ 21 марта 2020

Я новичок ie для регулярных выражений и хотел бы создать регулярное выражение для проверки имен пользователей. Это следующие условия:

  1. имя пользователя должно содержать от 4 до 20 символов
  2. имя пользователя не должно содержать ничего, кроме букв az, цифр 0-9 и специальных символов -._
  3. специальные символы -._ не должны использоваться последовательно во избежание путаницы
  4. имя пользователя не должно содержать пробелов

Примеры

  • any.user.13 => действительно
  • any..user13 => недопустимо (две точки подряд)
  • anyuser => действительный
  • любой => недопустимый (слишком короткий)
  • anyuserthathasasupersuperlonglongname = > недействительно (слишком много символов)
  • любое имя пользователя => недопустимо из-за пробелов

Я пытался создать мой собственное регулярное выражение и добрался только до точки, где я указываю разрешенные символы:

[a-z0-9.-_]{4,20}

К сожалению, он по-прежнему соответствует строке, если есть пробел в твин и возможно иметь два специальных символа.-_ последовательно:

matches although whitespace and two dots successively

Если кто-нибудь сможет оказать мне помощь по этому вопросу, я был бы чрезвычайно признателен. Пожалуйста, имейте в виду, что я новичок ie в регулярных выражениях и все еще изучаю его. Поэтому, объяснение вашего регулярного выражения было бы здорово.

Заранее спасибо:)

1 Ответ

3 голосов
/ 21 марта 2020

Иногда написание регулярного выражения может быть почти такой же сложной задачей, как поиск имени пользователя. Но здесь вы были достаточно близко, чтобы заставить это работать. Я могу указать на три причины, по которым ваша попытка не удалась.

Прежде всего, нам нужно сопоставить всю входную строку, а не только ее часть, потому что мы не хотим игнорировать такие вещи, как пробелы и другие символы, которые появляются на входе. Для этого обычно используются якоря ^ (начало совпадения) и $ (конец совпадения) соответственно.

Еще один момент заключается в том, что нам нужно предотвратить появление двух специальных символов рядом друг с другом. Лучше всего это сделать с негативным прогнозом.

Наконец, я вижу, что инструмент, который вы используете для проверки своего регулярного выражения, добавляет флаги gmi, а это не то, что нам нужно. В частности, флаг i говорит, что регулярное выражение должно быть без учета регистра, поэтому оно должно совпадать с заглавными буквами, такими как маленькие. Уберите этот флаг.

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

/^([a-z0-9]|[-._](?![-._])){4,20}$/

Здесь нет ничего действительно крипти c, кроме, возможно, для группы [-._](?![-._]) что означает любой из -._, за которым не следует ни один из -._.

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