#regex
Вопрос:
Мне действительно нужна помощь. В настоящее время у меня есть это выражение для проверки имени пользователя, но я хочу добавить еще, чтобы проверить, есть ли в строке более одной точки или подчеркивания. Если это так, верните значение false. если это не так, верните значение true.
^([_.a-z0-9]{3,15})$
Например, вернутся следующие случаи True
:
.yhjgh899_
_.9874juyh
899j_nnfg
874083.
Вернутся следующие случаи False
:
_jdun_jd.
jkuf..jf
Комментарии:
1. Регулярные выражения являются мощным инструментом, но они не являются универсальным инструментом для всех. Некоторая обработка может быть выполнена легко (или даже проще) без регулярных выражений. Попробуйте простой подход: проверьте входную строку на соответствие регулярному выражению
_
и посмотрите, сколько раз она совпадает. Или, без регулярных выражений, замените строку_
пустой строкой и сравните длину измененной строки с длиной исходной. Если разница больше 1, то входная строка содержит повторяющиеся_
символы. Преимуществом такого подхода является удобочитаемость кода.
Ответ №1:
Вы можете добавить отрицательный внешний вид в начале:
^(?!.*?([._]).*?1)[_.a-z0-9]{3,15}$
Смотрите демонстрацию регулярных выражений.
Подробные сведения:
^
— начало строки(?!.*?([._]).*?1)
— отрицательный просмотр вперед, что не матч, если есть ноль или больше символов, чем другие строки символов, как можно меньше, затем.
или_
(захваченные в группе 1, что можно назвать1
), потом опять ноль или больше символов, чем другие строки символов, как можно меньше, а затем то же значение, хранящихся в 1-й группе[_.a-z0-9]{3,15}
— от трех до пятнадцати строчных букв ASCII, цифр или.
/_
$
— конец веревки.