Регулярные выражения, составление логина, проверка на повтор символа
Как составить регулярное выражение, которое позволит ввести латинские цифры (строчные или заглавные), цифры (0-9), и/или знак нижнего подчёркивания _, но при условии, что _ в строке встречаться будет только 1 раз или не встречаться вовсе?
Мой пример: [A-Za-z0-9_?]{3,25}
К сожалению такой пример захватывает строку вне зависимости от того, сколько раз там "_" встречается. А нужно, чтобы если там было два и более раза - строка не захватывалась
Michelle_Onell - должно захватиться
MichelleOnell - должно захватиться
Michelle__Onell - не должно захватиться
_Michelle - должно захватиться
_Michelle_ - не должно захватиться
и т.п.
Ответы (1 шт):
Верные:
^(?=.{3,25}$)[a-zA-Z0-9]*_?[a-zA-Z0-9]*$
от Alexey Ten^(?!.*__)(?=[^_]*_?[^_]*$)[A-Za-z0-9_]{3,25}$
от Dev18
В 2-ом выражении:
^(?!.*__)
- снова запрещаем двойное нижнее подчёркивание.
(?=[^_]*_?[^_]*$)
- проверка, что _ встречается не более одного раза (или не встречается вовсе).
[A-Za-z0-9_]
- разрешённые символы.
{3,25}
- длина строки от 3 до 25 символов.
$
- конец строки.