Как в регулярных выражениях написать, что строка должна начинаться с букв и не может начинаться с нижнего подчеркивания?
Нужно в логине пользователя сделать проверку, - логин должен начинаться с латинских букв (большие и маленькие), может включать кроме букв цифры, тире и точку. И он не должен включать другие символы, в т.ч. нижнее подчеркивание. Мое регулярное выражение, - /^[a-zA-z^_][a-zA-z0-9-.]*[^ _!/+*()]+$/ не дает начинать логин с цифр и символов *-+/!)(
Но если я напишу в начале слова или в середине слова нижнее подчеркивание, - моя регулярка это пропускает.
Т.е. login_ не пропускает, а login_25 или _login пропускает.
Как это исправить?
Нина, но зачем? У вас уже условие что первый символ a-zA-Z, очевидно что подчёркивание это не одна из этих букв. Нет никакого смысла пытаться её явно исключать…
Потому что крышка (^) имеет значение отрицания только сразу после открывающей квадратной скобки. В остальных местах это просто символ. Т.е. ваше правило разрешает в качестве первого символа большие и маленькие буквы и два символа крышку (^) и подчёркивание (_)
Такая регулярка const nameRegExp = /^[a-zA-z]+[a-zA-z0-9-.]+$/; тоже допускает нижние подчеркивания и некоторые другие символы, что, вроде, не должно разрешаться
yup.object().shape( {
login: yup
.string()
.required( "Пожалуйста, заполните это поле" )
.matches( nameRegExp, "Допускаются только латинские буквы, цифры, точка, дефис без пропусков. Логин должен начинаться с буквы" )
.min( 3, "В этом поле должно быть не менее 3-х символов" )
.max( 255, "В этом поле должно быть не более 255-ти символов" ),
То есть вы изменили то, что я написал, а потом утверждаете, что мой вариант не работает?
A-z включает подчёркивание:
ABCDEFGHIUJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
not - инверсия, он же ! (восклицательный знак). я не знаю на каком языке программирования реализация. && !(/[^a-zA-z0-9\-\.]+/)
Это на псевдоязыке написано, для понимания идеи.
alexalexes,
к сожалению, работает некорректно. Если напишу недопустимый символ, - то выдаст ошибку, но после исправления - ошибка так и висит. На ошибки проверяю с помощью react-hook-form и schema