Почему мое регулярное выражение не соответствует ограничениям имени пользователя - PullRequest
1 голос
/ 19 февраля 2020

Я изо всех сил пытаюсь написать регулярное выражение в коде лагеря, которое должно соответствовать следующим 4 ограничениям, определенным для правильного «имени пользователя»

1) Имена пользователей могут использовать только буквенно-цифровые символы c.

2) Единственные цифры в имени пользователя должны быть в конце. Их может быть ноль или более в конце. Имя пользователя не может начинаться с цифры.

3) Буквы имени пользователя могут быть строчными и прописными.

4) Длина имени пользователя должна быть не менее двух символов. Двухсимвольное имя пользователя может использовать только буквы алфавита в качестве символов.

Вот Regex, который я придумал, в следующем коде (первая строка)

let userCheck = /[a-zA-Z]([a-zA-Z]+\d*|\d\d+)/; // the regex I wrote
let result = userCheck.test(username);

Однако, он отображает следующую ошибку

Your regex should not match BadUs3rnam3
Your regex should not match c57bT3

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

1 Ответ

1 голос
/ 19 февраля 2020

Ваш код проходит, потому что вы не используете якоря, поэтому вы получаете частичное совпадение.

Вы можете обновить шаблон до ^[a-zA-Z](?:[a-zA-Z]+\d*|\d{2,})$

Другим способом записи может быть совпадение либо 2 цифры a-zA-Z и 0+ цифр или, если есть один символ a-zA-Z, соответствуют 2 или более цифрам для прохождения правила В двухсимвольном имени пользователя в качестве символов могут использоваться только буквы алфавита.

^(?:[a-zA-Z]{2,}\d*|[a-zA-Z]\d{2,})$

Regex demo

let userCheck = /^[a-zA-Z](?:[a-zA-Z]+\d*|\d{2,})$/;
[
  "BadUs3rnam3",
  "c57bT3",
  "aa",
  "a111111",
  "a1",
  "11"
].forEach(username => console.log(username + ": " + userCheck.test(username)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...