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

Я написал это регулярное выражение

/(?=.*[a-z])(?!.*[A-Z])([\w\_\-\.].{3,10})/g

, чтобы проверить следующие условия

>has minimum of 3 and maximum of 10 characters.
>must contain atleast a lowercase alphabet.
>must contain only lowercase alphabets, '_', '-', '.' and digits.

это работает, но возвращает true, даже если символов более 10.

Я хочу, чтобы новое или измененное регулярное выражение проверяло указанные выше условия.

Ответы [ 3 ]

1 голос
/ 09 мая 2020
  1. добавить hanchors
  2. удалить последнюю точку
  3. отрицательный просмотр вперед бесполезен, если вы используете правильный класс символов

Это регулярное выражение будет работать:

 ^(?=.*[a-z])[a-z0-9_.-]{3,10}$

Демонстрация и объяснение

1 голос
/ 09 мая 2020

Вы можете использовать этот REGEX

REGEX Demo

([a-z]{1}[0-9a-z_.-]{2,9})

, пробный текст

username77
usr
username10
user_test
usr.1000
0 голосов
/ 09 мая 2020

Есть много способов сделать это. Я считаю, что общая характеристика c в том, что все они будут иметь позитивный взгляд на будущее. Вот еще один.

^(?=.{3,10}$)[a-z\d_.-]*[a-z][a-z\d_.-]*$

Демо

Обратите внимание, что [a-z\d_.-]* появляется дважды. Некоторые механизмы регулярных выражений поддерживают подпрограммы (или подвыражения), которые позволяют сохранять повторяющуюся часть регулярного выражения в пронумерованной или именованной группе захвата для повторного использования позже в строке. Например, при использовании механизма PCRE вы можете написать

^(?=.{3,10}$)([a-z\d_.-]*)[a-z](?1)$

Demo

(?1) заменяется токенами регулярного выражения, которые соответствуют строке, сохраненной для захвата группа 1 ([a-z\d_.-]*), в отличие от \1, которая ссылается на содержимое группы захвата 1. Использование подпрограмм может сократить выражение регулярного выражения, но, что более важно, это снижает вероятность ошибок при внесении изменений в регулярное выражение. жетоны, которые повторяются.

...