Исключить _ из почтового адреса в регулярном выражении перед @
Нашел в инете регулярку для поиска email, модифицировал под свои нужды:
/^[A-Za-z](\w+([\-\.](?=[A-Za-z0-9]))*?)*@(\w+([\.\-](?=(\w|\d))))+\w{2,6}$/
Но оно валидирует адреса вида:
[email protected]
Как сделать, чтобы нижнее подчеркивание перед @ валидацию не проходило?
Ответы (3 шт):
Для исключения всех подчеркиваний первый \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}$/
Написал такой 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 символов латинского алфавита
Чуть переделал, получилось так:
^[A-Za-z0-9]+(([_\.\-](?=[A-Za-z0-9]))[a-zA-Z0-9]+([\-\.](?=[A-Za-z0-9]))*?)*@(\w+([\.\-](?=(\w|\d))))+[a-zA-Z]{2,6}$