Регулярное выражение, которое делает то, что, как говорят стандарты, разрешено, в соответствии с тем, что я видел о них, это:
/^(?!(^[.-].*|.*[.-]@|.*\.{2,}.*)|^.{254}.+@)([a-z\xC0-\xFF0-9!#$%&'*+\/=?^_`{|}~.-]+@)(?!.{253}.+$)((?!-.*|.*-\.)([a-z0-9-]{1,63}\.)+[a-z]{2,63}|(([01]?[0-9]{2}|2([0-4][0-9]|5[0-5])|[0-9])\.){3}([01]?[0-9]{2}|2([0-4][0-9]|5[0-5])|[0-9]))$/gim
Демо / Анализ отладки ( интерактивный )
Разделить:
^(?!(^[.-].*|.*[.-]@|.*\.{2,}.*)|^.{254}.+@)
([a-z\xC0-\xFF0-9!#$%&'*+\/=?^_`{|}~.-]+@)
(?!.{253}.+$)
(
(?!-.*|.*-\.)
([a-z0-9-]{1,63}\.)+
[a-z]{2,63}
|
(([01]?[0-9]{2}|2([0-4][0-9]|5[0-5])|[0-9])\.){3}
([01]?[0-9]{2}|2([0-4][0-9]|5[0-5])|[0-9])
)$
Анализ:
(?!(^[.-].*|.*[.-]@|.*\.{2,}.*)|^.{254}.+@)
Отрицательный прогноз для адреса, начинающегося с .
, заканчивающегося одним, имеющего ..
в нем или превышающего максимальную длину в 254 символа
([a-z\xC0-\xFF0-9!#$%&'*+\/=?^_`{|}~.-]+@)
соответствует 1 или более из разрешенных символов , к нему применяется отрицательный взгляд
(?!.{253}.+$)
Отрицательный взгляд на часть имени домена, ограничивающая его до всего 253 символов
(?!-.*|.*-\.)
Отрицательный прогноз для каждого из доменных имен, которые не допускаются , начиная или заканчивая .
([a-z0-9-]{1,63}\.)+
простое совпадение групп для разрешенных символов в имени домена, которые ограничены 63 символами каждый
[a-zA-Z]{2,63}
простое совпадение групп для разрешенного домена верхнего уровня, который в настоящее время все еще ограничен только буквами, но действительно включает> 4-буквенные TLD .
(([01]?[0-9]{2}|2([0-4][0-9]|5[0-5])|[0-9])\.){3}
([01]?[0-9]{2}|2([0-4][0-9]|5[0-5])|[0-9])
альтернатива для доменных имен: это соответствует первым 3 числам в IP-адресе с a .
позади него, а затем четвертому числу в IP-адресе без .
позади него.