Вы можете попробовать это:
^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$
При этом используются подсказки, чтобы имя пользователя должно содержать от 5 до 10 символов (?=.{5,10}$)
и чтобы ни один из 3 специальных символов не появлялся дважды подряд (?!.*[._-]{2})
, но в целом они могут появляться любое количество раз (интерпретирует Конрад Иными словами, 3 специальных символа могут появляться до 3 раз).
Вот тестовый набор в Java:
String[] test = {
"abc",
"abcde",
"acd_e",
"_abcd",
"abcd_",
"a__bc",
"a_.bc",
"a_b.c-d",
"a_b_c_d_e",
"this-is-too-long",
};
for (String s : test) {
System.out.format("%s %B %n", s,
s.matches("^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$")
);
}
Это печатает:
abc FALSE
abcde TRUE
acd_e TRUE
_abcd FALSE
abcd_ FALSE
a__bc FALSE
a_.bc FALSE
a_b.c-d TRUE
a_b_c_d_e TRUE
this-is-too-long FALSE
Смотри также