Предисловие
Есть много правил, которые описывают действительный адрес электронной почты. Предлагаемый мною решение здесь только проверить правила, описанные в исходном вопросе ^[A-Za-z0-9]{5,25}@{1}[A-Za-z]{5,15}[.]{1}[A-Za-z {3,10}$
я рекомендую сделать следующие изменения в базовое выражение:
^[A-Za-z0-9]{5,25}@{1}[A-Za-z]{5,15}[.]{1}[A-Za-z {3,10}$
2 1 2 1 2 3
- удалить
{1}
квантор, так как они не нужны
- удалите
A-Z
из классов персонажей и используйте флагом, нечувствительный к регистру
- вставьте закрытие
]
на последнем ча Класс racter
Полученное выражение выглядит следующим образом:
^[a-z0-9]{5,25}@[A-Za-z]{5,15}[.][a-z]{3,10}$
Описание
^(?=(?:.*[email protected]*?(?P<TooManyAtSigns>@))?)(?=(?P<NoAtSign>[^@\n]*$)?)(?=(?:[a-z0-9]*?(?P<BadCharacterInUsername>[^[email protected]\n]))?)(?=(?:.*[email protected][a-z.]*?(?P<BadCharacterInDomain>[^a-z.\n]))?)(?=(?:(?:(?P<UsernameTooShort>[a-z0-9.]{0,4})|(?P<UsernameTooLong>[a-z0-9.]{26,}))@)?)(?=(?:.*[email protected](?:(?P<DomainNameTooShort>[A-Za-z]{0,4})|(?P<DomainNameTooLong>[a-z]{16,}))[.])?)(?=(?:.*[email protected](?P<DomainNameMissingDot>[^.\n]*)$)?)(?=(?:.*[email protected]*?[.](?:(?P<TopLevelDomainNameTooShort>[a-z]{0,2})|(?P<TopLevelDomainNameTooLong>[a-z]{11,}))$)?)(?=(?:.*?(?P<FoundASpace>\))?)(?P<email>.*)$
** Для того, чтобы увидеть изображение лучше, просто щелкните правой кнопкой мыши на изображение и выберите вид в новом окне
** Для того, чтобы увидеть изображение лучше, просто щелкните правой кнопкой мыши на изображение и выберите пункт Открыть в новом окне
Это регулярное выражение будет делать следующее:
- Пользователи ненавидят играть итеративный игру где они исправляют одну вещь за раз, поэтому это выражение проверяет все заранее и расскажет вам все, что не так.
- Выполняет различные тесты, если эти тесты будут найдены, будет занесена соответствующая группа захваченных имен.Если группа захвата не заполняется, то тест пройден
- Слишком много
@
символов
- в разделе доменных имен
- найти недопустимые символы Нет
.
. Этот тест покажет только первый недопустимый символ найден перед @
и первым недопустимым символом после @
- Имя пользователя слишком короткий или слишком длинный
- имя домена является слишком коротким или длинным. например:
@gm.com
или @TheForceIsWithYouAllTheTime.com
Боковое примечание gm.com
является допустимым доменным именем для General Motors.
- Доменное имя верхнего уровня слишком короткое или слишком длинное. например:
@gmail.au
или @gmail.WhyIsThisNameSoLong
Боковое примечание .au
является действительным именем верхнего уровня.
- выглядит для пространств
Пример
Live Demo
https://regex101.com/r/cQ0jR6/2
Пример текста
[email protected]
[email protected]
[email protected]
[email protected]@gmail.com
[email protected]
RoYoMiGmail.com
[email protected]!m
[email protected]
[email protected]
[email protected]
[email protected]@Gma.InterGalatic
[email protected]
Образец Матчи
MATCH 1
email [0-16] `[email protected]`
MATCH 2
UsernameTooShort [17-20] `RoY`
email [17-30] `[email protected]`
MATCH 3
UsernameTooLong [31-62] `RoYoMiInternationalManOfMystery`
email [31-72] `[email protected]`
MATCH 4
TooManyAtSigns [81-82] `@`
BadCharacterInUsername [75-76] `!`
BadCharacterInDomain [81-82] `@`
email [73-91] `[email protected]@gmail.com`
MATCH 5
DomainNameTooShort [99-101] `gm`
email [92-105] `[email protected]`
MATCH 6
NoAtSign [106-121] `RoYoMiGmail.com`
BadCharacterInUsername [117-118] `.`
email [106-121] `RoYoMiGmail.com`
MATCH 7
BadCharacterInDomain [133-134] `!`
DomainNameMissingDot [129-135] `gmco!m`
email [122-135] `[email protected]!m`
MATCH 8
DomainNameTooLong [143-177] `ThisIsNotTheDroidYouWereLookingFor`
email [136-181] `[email protected]`
MATCH 9
TopLevelDomainNameTooShort [195-197] `co`
email [182-197] `[email protected]`
MATCH 10
TopLevelDomainNameTooLong [211-223] `InterGalatic`
email [198-223] `[email protected]`
MATCH 11
TooManyAtSigns [228-229] `@`
BadCharacterInDomain [228-229] `@`
UsernameTooShort [224-227] `RoY`
DomainNameTooShort [229-232] `Gma`
TopLevelDomainNameTooLong [233-245] `InterGalatic`
email [224-245] `[email protected]@Gma.InterGalatic`
MATCH 12
DomainNameTooLong [253-282] `MoreDroidsYouAreNotLookingFor`
email [246-286] `[email protected]`
Какие сообщения вы хотите показать, кстати? –
Regex либо соответствует, либо нет ... нет серой области. Вам нужно будет разобрать адрес электронной почты в коде и сообщить о конкретных проблемах. На самом деле, вероятно, это не поможет пользователю. –
Ваше регулярное выражение для проверки действительных адресов электронной почты не позволяет использовать весь спектр возможностей, таких как имена, разделенные точками, дополнительные символы, многосегментные доменные имена. Например: «Ro.Yo.Me + stackoverflow @ ix.netcom.com» полностью соответствует стандарту, но не прошел тест. Также у вас есть ошибка в выражении, последний класс символов отсутствует закрывающая скобка. –