Исключить _ из почтового адреса в регулярном выражении перед @

Нашел в инете регулярку для поиска email, модифицировал под свои нужды:

/^[A-Za-z](\w+([\-\.](?=[A-Za-z0-9]))*?)*@(\w+([\.\-](?=(\w|\d))))+\w{2,6}$/

Но оно валидирует адреса вида:

[email protected]

Как сделать, чтобы нижнее подчеркивание перед @ валидацию не проходило?


Ответы (3 шт):

Автор решения: Alex R.

Для исключения всех подчеркиваний первый \w надо заменить на [A-Za-z0-9].

^[A-Za-z]([A-Za-z0-9]+([\-\.](?=[A-Za-z0-9]))*?)*@(\w+([\.\-](?=(\w|\d))))+\w{2,6}$

С рекомендациями от PotroNik проверяется символ перед @

/^[A-Za-z](\w+([\-\.](?=[A-Za-z0-9]))*?)*[A-Za-z0-9]@(\w+([\.\-](?=(\w|\d))))+\w{2,6}$/
→ Ссылка
Автор решения: PotroNik

Написал такой regexp:

(?=[a-zA-Z0-9])^[\w-\.]+[A-Za-z0-9]@[\w-]+[A-Za-z0-9]\.([\w-]+[A-Za-z0-9]\.){0,}[A-Za-z]{2,6}$

Пример работы:
https://regex101.com/r/Jh8d0J/2


(?=[a-zA-Z0-9]) - проверка что первый символ цифра или буква
^ - начало строки
[\w-\.]+ - любой буквенный символ, цифра, тире, точка и нижнее подчеркивание
[A-Za-z0-9]@ - любо символ латинского алфавита или цифра, за которым следует символ @
[\w-]+\. - буквенный символ латинского алфавита, цифра, нижнее подчеркивание и тире, перед символом точки
([\w-]+[A-Za-z0-9]\.){0,} - для почты зарегистрированной на домене третьего и выше уровней
[A-Za-z]{2,6}$ от 2 до 6 символов латинского алфавита

→ Ссылка
Автор решения: D K

Чуть переделал, получилось так:

^[A-Za-z0-9]+(([_\.\-](?=[A-Za-z0-9]))[a-zA-Z0-9]+([\-\.](?=[A-Za-z0-9]))*?)*@(\w+([\.\-](?=(\w|\d))))+[a-zA-Z]{2,6}$
→ Ссылка