#c# #regex #c#-4.0
#c# #регулярное выражение #c #-4.0
Вопрос:
Я создал это Regex
для проверки имен пользователей, которые мне нужны в моих проектах:
^(?=.{3,32}$)(?!.*[._-]{2})(?!.*[0-9]{5,})[a-z](?:[w]*|[a-z0-9.]*|[a-z0-9-]*)[a-z0-9]$
Это работает просто отлично; но мне интересно, есть ли какие-либо улучшения и оптимизация для этого, поскольку я не совсем любитель регулярных выражений.
Регулярное выражение и тесты доступны здесь.
Правила таковы:
- имена пользователей должны начинаться с
[a-z]
- имена пользователей должны заканчиваться на
[a-z0-9]
- имена пользователей могут иметь длину от 3 до 32
- имена пользователей могут содержать любое из
[a-z0-9._-]
- Числа не должны находиться рядом друг с другом более 4 раз. Я имею в виду,
p1234
совпадает, аp12345
нет. - каждое имя пользователя может содержать только одно из
[._-]
. Я имею в виду, что имя пользователя может содержать.
или-
или_
- за каждым
.
,-
и_
должно следовать буквенно-цифровое значение. Я имею в виду, что за.
не может следовать другое.
. Они не должны находиться поблизости друг от друга.
Тесты:
j1vad-amiry match
j1vad-ami-ry match
ja23d_am8ry match
ja_23d_am8ry match
jav5d2.am3y match
jav.ad.amiry match
jav.ad.ami.ry.2 match
ja3fd4 match
page2491 match
page24915 not match
jav-ad_amiry not match
javad_am-iry not match
jav.ami-ry not match
jav.ami_ry not match
jav.ami__ry not match
2jav not match
2jav_ad not match
2jav_ad3 not match
Заранее спасибо.
Комментарии:
1. Я бы разделил его на несколько проверок. Таким образом, вы могли бы сообщить, что именно не так с конкретным именем пользователя, а не просто «это неправильно». PS:
performance
тег здесь не имеет особого смысла.2. Похоже на тему для CodeReview , но это не ТАК.
3. @HABO Я не знал о
CodeReview
сайте; Спасибо за упоминание. Я сейчас это проверяю.4. @zerkms Я удалил
performance
тег5. Вам не обязательно использовать regex для всего этого, верно? Гораздо проще проверить длину, например, в C #.