Я хочу написать регулярное выражение, которое будет фильтровать любое имя пользователя, которое:
- Начинается с цифры или буквы (без учета регистра)
Может включать -
, но не может содержать более одного подряд
пример u-s-e-r
✔ us-er
✔ us--er
✖
Также имя пользователя не может начинаться с -
или заканчиваться -
пример -user
✖ user-
✖
- Это также должно бытьпо крайней мере 1 символ ( буква или цифра ) и максимум 39.
Ближайший результат, к которому я пришел, примерно такой:
^[a-zA-Z\d](?:[a-zA-Z\d]|-(?=[a-zA-Z\d])){0,38}
Это точно соответствует тому, что должно соответствовать, но также соответствует некоторым вещам, которые не должны.
В основном эти не должны быть действительными:
-username
_username_
__us_ername
us_er
username-
1user--name
132uname-
-uname1234
-username-
user--name
av34axc-
1234567890A1234567890B1234567890C1234567890D
И эти должны быть действительными:
Username
a-a
aBc
BaC
1-1
1-2-3-4
q-1-2-3
q-q-q-q-q
username
123username123
username3123
1234
user-name
13-13
q1-q2-q3
a
A
1234567890A1234567890B1234567890C123456
1234567890A123456-7890B1234567890C12345