рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХрд┐рд╕реА рднреА рдордЬрдмреВрдд рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рдХреА рдиреАрдВрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдИрдореЗрд▓ рдкрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреА рд╣реЛрдЧреА рдХрд┐ рдкрддрд╛ рд╕рд╣реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЪреМрдВрдХрд╛ рджреЗрддреА рд╣реИред рдИрдореЗрд▓ рдлрд╝реЙрд░реНрдореЗрдЯ рд╕рддреНрдпрд╛рдкрди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рд╡реИрдз рдкрддреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдпрд╛ рд╡рд┐рдХреГрдд рдкрддреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИрдВред
рдИрдореЗрд▓ рдкрддреЗ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдирд╛
рдкреНрд░рддреНрдпреЗрдХ рдИрдореЗрд▓ рдкрддреЗ рдореЗрдВ "@" рдкреНрд░рддреАрдХ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рджреЛ рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдФрд░ рдбреЛрдореЗрди рдкрд╛рд░реНрдЯред рдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ local-part@domain рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдотАФрдореБрдЦреНрдп рд░реВрдк рд╕реЗ RFC 5321 рдФрд░ RFC 5322 рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рддтАФрдХрд╛рдлреА рднрд┐рдиреНрдирддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддреЗ рд╣реИрдВред
рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ
рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ "@" рдкреНрд░рддреАрдХ рд╕реЗ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ рдФрд░ рдореЗрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрд▓рдмреЙрдХреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ рд╡реИрдз рд╡рд░реНрдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдмрдбрд╝реЗ рдФрд░ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░ (A-Z, a-z)
- рдЕрдВрдХ (0-9)
- рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг: ! # $ % & ' * + - / = ? ^ _ ` { | } ~
- рдкреАрд░рд┐рдпрдб (.) рдЬрдм рд╢реБрд░реБрдЖрдд рдпрд╛ рдЕрдВрдд рдореЗрдВ рдирд╣реАрдВ рд╣реЛ, рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рди рд╣реЛ
- рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдЬреЛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╡рд░реНрдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдпрд╣ рд▓рдЪреАрд▓рд╛рдкрди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ user+tag@domain.com, "john doe"@example.com, рдФрд░ admin!special@company.org рдЬреИрд╕реЗ рдкрддреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╡реИрдз рд╣реИрдВред рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдИрдореЗрд▓ рдЪреЗрдХрд░ рдЗрди рд╡реИрдз рдкрддреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдбреЛрдореЗрди рдкрд╛рд░реНрдЯ
рдбреЛрдореЗрди рдкрд╛рд░реНрдЯ "@" рдкреНрд░рддреАрдХ рдХреЗ рдмрд╛рдж рдЖрддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдИрдореЗрд▓ рдХрд╣рд╛рдВ рдбрд┐рд▓реАрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реИрдз рдбреЛрдореЗрди рдлрд╝реЙрд░реНрдореЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдорд╛рдирдХ рдбреЛрдореЗрди рдирд╛рдо (example.com, mail.company.org)
- рдЧреИрд░-ASCII рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд рдбреЛрдореЗрди рдирд╛рдо
- рдХреЛрд╖реНрдардХ рдореЗрдВ IP рдкрддреЗ ([192.168.1.1] рдпрд╛ [IPv6:2001:db8::1])
рдбреЛрдореЗрди рдирд╛рдореЛрдВ рдХреЛ DNS рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдкреАрд░рд┐рдпрдб рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд▓реЗрдмрд▓, рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдмрд▓ рдПрдХ рдЕрд▓реНрдлрд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рд╡рд░реНрдг рд╕реЗ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдмреАрдЪ рдореЗрдВ рдХреЗрд╡рд▓ рдЕрд▓реНрдлрд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рд╡рд░реНрдг рдФрд░ рд╣рд╛рдЗрдлрд╝рди рд╣реЛрддреЗ рд╣реИрдВред
рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░реЗрдЧреЗрдХреНрд╕ рдХреА рдЪреБрдиреМрддреА
RFC рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдИрдореЗрд▓ рдкрддреЛрдВ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдмрдирд╛рдирд╛ рдЕрддреНрдпрдВрдд рдХрдард┐рди рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрдорддреМрд░ рдкрд░ рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдирд┐рд░рдВрддрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред
рд╕рд░рд▓ рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдХреНрдпреЛрдВ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ
рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд▓реАрдХреГрдд рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
рдЬрдмрдХрд┐ рдпрд╣ рдкреИрдЯрд░реНрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рдкрддреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреБрдХреНрдд рд╡реИрдз рдкрддреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдЙрджреНрдзреГрдд рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ
- рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ
!рдпрд╛#рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг - рдПрдХрд▓-рд╡рд░реНрдг рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдбреЛрдореЗрди (рд╣рд╛рдВ, рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ)
- IP рдкрддрд╛ рдбреЛрдореЗрди рдкрд╛рд░реНрдЯ
рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдкреИрдЯрд░реНрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЕрдорд╛рдиреНрдп рдкрддреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдкреАрд░рд┐рдпрдб
- рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдпрд╛ рдЕрдВрдд рдореЗрдВ рдкреАрд░рд┐рдпрдб
- рд╣рд╛рдЗрдлрд╝рди рд╕реЗ рд╢реБрд░реВ рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдбреЛрдореЗрди рд▓реЗрдмрд▓
RFC 5322 рд░реЗрдЧреЗрдХреНрд╕
рдХреБрдЦреНрдпрд╛рдд RFC 5322-рдЕрдиреБрдкрд╛рд▓рди рд░реЗрдЧреЗрдХреНрд╕ рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреИрдЯрд░реНрди, рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдлреИрд▓рд╛ рд╣реБрдЖ, рдкреВрд░реНрдг рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
рдпрд╣ рд░реЗрдЧреЗрдХреНрд╕, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрддреЗ рд╣реБрдП рднреА, рд░рдЦрд░рдЦрд╛рд╡ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ, рдкреНрд░рджрд░реНрд╢рди рдЪрд┐рдВрддрд╛рдПрдВ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЪреБрдиреМрддрд┐рдпрд╛рдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдкрдврд╝ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреБрдЫ рд░реЗрдЧреЗрдХреНрд╕ рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреА рд╣реИред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди
рдкреВрд░реНрдг RFC рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рдЯреАрдХрддрд╛ рдХреЛ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрддреБрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓рдХреНрд╖реНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рдкрддреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реИ рдЬрдмрдХрд┐ рдЙрди рдИрдореЗрд▓ рдлрд╝реЙрд░реНрдореЗрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рд╛рдорд╛рдиреНрдп-рдкреНрд░рдпреЛрдЬрди рдкреИрдЯрд░реНрди
рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдВрддреБрд▓рд┐рдд рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░реЗрдЧреЗрдХреНрд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
рдпрд╣ рдкреИрдЯрд░реНрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ:
- @ рд╕реЗ рдкрд╣рд▓реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд░реНрдг
- рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ @ рдкреНрд░рддреАрдХ
- @ рдФрд░ рдЕрдВрддрд┐рдо рдкреАрд░рд┐рдпрдб рдХреЗ рдмреАрдЪ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд░реНрдг
- рдЕрдВрддрд┐рдо рдкреАрд░рд┐рдпрдб рдХреЗ рдмрд╛рдж рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд░реНрдг
- рдкрддреЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рдХреЛрдИ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдирд╣реАрдВ
рд╣рд╛рд▓рд╛рдВрдХрд┐ RFC-рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкреИрдЯрд░реНрди рд╡рд╕реНрддреБрддрдГ рд╕рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рджреБрдирд┐рдпрд╛ рдХреЗ рдИрдореЗрд▓ рдкрддреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╕реНрдкрд╖реНрдЯ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдиреНрдирдд рдкреИрдЯрд░реНрди
рд╕рдЦреНрдд рд╕рддреНрдпрд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
const strictEmailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
рдпрд╣ рдкреИрдЯрд░реНрди рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
- рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╡рд░реНрдг рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ
- рдбреЛрдореЗрди рд▓реЗрдмрд▓ рдХреА рд▓рдВрдмрд╛рдИ рд╕реАрдорд╛ (рдЕрдзрд┐рдХрддрдо 63 рд╡рд░реНрдг)
- рдбреЛрдореЗрди рд╕реАрдорд╛рдУрдВ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рд╣рд╛рдЗрдлрд╝рди рдХреА рд░реЛрдХрдерд╛рдо
рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░реЗрдЧреЗрдХреНрд╕ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдкреИрдЯрд░реНрди рд╣реИрдВ:
JavaScript:
function validateEmailSyntax(email) {
const pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return pattern.test(email) && email.length <= 254;
}
Python:
import re
def validate_email_syntax(email):
pattern = r'^[^\s@]+@[^\s@]+\.[^\s@]+$'
if len(email) > 254:
return False
return bool(re.match(pattern, email))
PHP:
function validateEmailSyntax($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ PHP рдХрд╛ рдмрд┐рд▓реНрдЯ-рдЗрди filter_var рдлрдВрдХреНрд╢рди рдХрд╕реНрдЯрдо рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЙрдЪрд┐рдд рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдкрд░реЗ: рд▓рдВрдмрд╛рдИ рдХреА рдмрд╛рдзрд╛рдПрдВ
рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рдВрдмрд╛рдИ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреБрд▓ рд▓рдВрдмрд╛рдИ рд╕реАрдорд╛
RFC 5321 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдИрдореЗрд▓ рдкрддреЗ рдХреБрд▓ 254 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдпрд╣ рд╕реАрдорд╛ рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ, @ рдкреНрд░рддреАрдХ, рдФрд░ рдбреЛрдореЗрди рдкрд╛рд░реНрдЯ рд╕рд╣рд┐рдд рдкреВрд░реНрдг рдкрддреЗ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред
рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдХреА рд▓рдВрдмрд╛рдИ
рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ 64 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рд▓рдВрдмреЗ рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рд╡рд╛рд▓реЗ рдкрддреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рд╡реЗ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЗ рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реЛрдВред
рдбреЛрдореЗрди рдХреА рд▓рдВрдмрд╛рдИ
рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЛрдореЗрди рд▓реЗрдмрд▓ 63 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ, рдФрд░ рдХреБрд▓ рдбреЛрдореЗрди рдкрд╛рд░реНрдЯ 253 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдпреЗ рд╕реАрдорд╛рдПрдВ рдИрдореЗрд▓ рдорд╛рдирдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп DNS рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред
рд▓рдВрдмрд╛рдИ рдЬрд╛рдВрдЪ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рд╣рдореЗрд╢рд╛ рд░реЗрдЧреЗрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд▓рдВрдмрд╛рдИ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВ:
function validateEmail(email) {
// рд▓рдВрдмрд╛рдИ рдХреА рдмрд╛рдзрд╛рдПрдВ
if (email.length > 254) return false;
const [localPart, domain] = email.split('@');
if (!localPart || !domain) return false;
if (localPart.length > 64) return false;
if (domain.length > 253) return false;
// рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЛрдореЗрди рд▓реЗрдмрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
const labels = domain.split('.');
for (const label of labels) {
if (label.length > 63) return false;
}
// рд░реЗрдЧреЗрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди
const pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return pattern.test(email);
}
рд╕рд╛рдорд╛рдиреНрдп рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдЧрд▓рддрд┐рдпрд╛рдВ
рд╕рд╛рдорд╛рдиреНрдп рд╕рддреНрдпрд╛рдкрди рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЧрд▓рдд рдЕрд╕реНрд╡реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
TLD рд▓рдВрдмрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рдХреБрдЫ рдкреИрдЯрд░реНрди рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдбреЛрдореЗрди рдХреЛ рдХрдо рд╕реЗ рдХрдо 2 рдпрд╛ 3 рд╡рд░реНрдг рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп TLD рдЬреИрд╕реЗ .com, .org, рдФрд░ .net 3+ рд╡рд░реНрдг рд╣реИрдВ, рд╡реИрдз рдПрдХрд▓-рд╡рд░реНрдг TLD рдореМрдЬреВрдж рд╣реИрдВ, рдФрд░ рдирдП gTLD рд▓рдВрдмрд╛рдИ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рдкреНрд▓рд╕ рд╕рд╛рдЗрди рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдирд╛
рдкреНрд▓рд╕ рд╕рд╛рдЗрди (+) рдИрдореЗрд▓ рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ рд╡реИрдз рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдИрдореЗрд▓ рдЯреИрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, user+newsletter@gmail.com)ред рдкреНрд▓рд╕ рд╕рд╛рдЗрди рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдИрдореЗрд▓ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдФрд░ рдкрд╛рд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рдХреБрдЫ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ рдХреБрдЫ рд╡рд░реНрдгреЛрдВ (рдЬреИрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрдХреНрд╖рд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦрддреЗ рд╣реИрдВред 123@domain.com рдЬреИрд╕реЗ рдкрддреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдз рд╣реИрдВ рдФрд░ рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдзрд╛рд░рдгрд╛рдПрдВ
рдЬрдмрдХрд┐ рдбреЛрдореЗрди рдкрд╛рд░реНрдЯ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ, рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ RFC 5321 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХреЗрд╕-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рдореЗрд▓ рд╕рд░реНрд╡рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдХреЛ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдорд╛рдирддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рдХреЗрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд▓реЛрдЕрд░рдХреЗрд╕ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рд╡рд░реНрдг рдЕрд╕реНрд╡реАрдХрд░рдг
рдЖрдзреБрдирд┐рдХ рдИрдореЗрд▓ рдорд╛рдирдХ рд▓реЛрдХрд▓ рдФрд░ рдбреЛрдореЗрди рджреЛрдиреЛрдВ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЧреИрд░-ASCII рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд рдИрдореЗрд▓ рдкрддреЛрдВ (EAI) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг EAI рд╕рдорд░реНрдерди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ ASCII рддрдХ рд╕реАрдорд┐рдд рдкреИрдЯрд░реНрди рд╡реИрдз рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдкрддреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди
рдИрдореЗрд▓ рдлрд╝реЙрд░реНрдореЗрдЯ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреБрдХреНрдд рд╕реНрддрд░ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдФрд░ рдЬреЛрдЦрд┐рдо рд╕рд╣рдирд╢реАрд▓рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдлреЙрд░реНрдо
рд╕рд╛рдЗрдирдЕрдк рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП, рд╕рдЦреНрдд рд╕рддреНрдпрд╛рдкрди рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХрд▓реА рд╡реИрдз рдкрддреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреНрд╖рдорддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдИрдореЗрд▓ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВред рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдХрд┐рди рд╡реИрдз рдкрддреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рд╛рдЗрдирдЕрдк рдЦреЛ рд╕рдХрддрд╛ рд╣реИред
API рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди
API рдХреЛ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдХреГрдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдордзреНрдпрдо рд╕рддреНрдпрд╛рдкрди рдкреИрдЯрд░реНрди рд╡реИрдз рдкрддреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛ рд░рд╣рддреЗ рд╣реБрдП рдЬрд▓реНрджреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред
рдИрдореЗрд▓ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рд╕реВрдЪрд┐рдпрд╛рдВ
рдЖрдпрд╛рддрд┐рдд рдИрдореЗрд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЕрдзрд┐рдХ рдорд╣рдВрдЧреЗ рд╕рддреНрдпрд╛рдкрди рдЬрд╛рдВрдЪреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдпрд╣ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЯрд╛рдЗрдкреЛ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдИрдореЗрд▓ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЙрдЪреНрдЪ-рд╕реБрд░рдХреНрд╖рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
рдИрдореЗрд▓ рд╡реИрдзрддрд╛ рдХреЗ рдЙрдЪреНрдЪ рдЖрд╢реНрд╡рд╛рд╕рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЗрд╡рд▓ рдПрдХ рдкрд╣рд▓реЗ рдХрджрдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ MX рд░рд┐рдХреЙрд░реНрдб рд╕рддреНрдпрд╛рдкрди, SMTP рд╕рддреНрдпрд╛рдкрди, рдФрд░ BillionVerify рдЬреИрд╕реА рдкреЗрд╢реЗрд╡рд░ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреА рднреВрдорд┐рдХрд╛
рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдПрдХ рдкреВрд░реНрдг рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░рдгрдиреАрддрд┐ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдкрд░рдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдЕрдиреНрдп рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкреНрд░рднрд╛рд╡реА рдИрдореЗрд▓ рдЪреЗрдХрд░ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рд╕рддреНрдпрд╛рдкрди рдкрджрд╛рдиреБрдХреНрд░рдо
рдПрдХ рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдХреНрд░рдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреА рд╣реИ:
- рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди - рдлрд╝реЙрд░реНрдореЗрдЯ рдЬрд╛рдВрдЪ (рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдлреЛрдХрд╕)
- рдбреЛрдореЗрди рд╕рддреНрдпрд╛рдкрди - рдбреЛрдореЗрди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдкреБрд╖реНрдЯрд┐
- MX рд░рд┐рдХреЙрд░реНрдб рдЬрд╛рдВрдЪ - рдореЗрд▓ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╕рддреНрдпрд╛рдкрди
- SMTP рд╕рддреНрдпрд╛рдкрди - рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрд▓рдмреЙрдХреНрд╕ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдкреБрд╖реНрдЯрд┐
- рдбрд┐рд▓реАрд╡рд░реА рдХреНрд╖рдорддрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди - рдХреИрдЪ-рдСрд▓ рдбреЛрдореЗрди, рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкрддреЗ, рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдИрдореЗрд▓ рдХреА рдЬрд╛рдВрдЪ
рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдЬрд▓реНрджреА рдФрд░ рд╕рд╕реНрддреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИред рдмреБрдирд┐рдпрд╛рджреА рдлрд╝реЙрд░реНрдореЗрдЯ рдЬрд╛рдВрдЪ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрддреЗ рдХрднреА рднреА рдЕрдзрд┐рдХ рдорд╣рдВрдЧреЗ рд╕рддреНрдпрд╛рдкрди рдЪрд░рдгреЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддреЗ, рдЬрд┐рд╕рд╕реЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╕рдВрд╕рд╛рдзрди рдФрд░ API рдХреЙрд▓ рдХреА рдмрдЪрдд рд╣реЛрддреА рд╣реИред
рдкреЗрд╢реЗрд╡рд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди
рдЬрдмрдХрд┐ рдЖрдк рдЗрди-рд╣рд╛рдЙрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, BillionVerify рдЬреИрд╕реА рдкреЗрд╢реЗрд╡рд░ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд╕реЗрд╡рд╛рдПрдВ рдкреВрд░реНрдг рд╕рддреНрдпрд╛рдкрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВред BillionVerify API рдЕрдкрдиреЗ рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдбреЛрдореЗрди рдЬрд╛рдВрдЪ, SMTP рд╕рддреНрдпрд╛рдкрди, рдХреИрдЪ-рдСрд▓ рдкрд╣рдЪрд╛рди, рдФрд░ рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдИрдореЗрд▓ рдкрд╣рдЪрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА API рдХреЙрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
async function verifyEmail(email) {
// рддреНрд╡рд░рд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬрд╛рдВрдЪ
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
return { valid: false, reason: 'Invalid syntax' };
}
// BillionVerify API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реНрдг рд╕рддреНрдпрд╛рдкрди
const response = await fetch('https://api.billionverify.com/v1/verify', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ email })
});
return await response.json();
}
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдкрд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╡реНрдпрд╛рдкрдХ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд╕реЗрд╡рд╛ рдХреЛ рд╕реМрдВрдкрддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдмрдВрдзреА рд╡рд┐рдЪрд╛рд░
рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд░реЗрдЧреЗрдХреНрд╕ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкрддреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рд╕рддреНрдпрд╛рдкрди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░реЗрдЧреЗрдХреНрд╕ рдЗрдВрдЬрди рдХреЗ рдЕрдВрддрд░
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд░реЗрдЧреЗрдХреНрд╕ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ рдФрд░ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ
рдиреЗрд╕реНрдЯреЗрдб рдХреНрд╡рд╛рдВрдЯрд┐рдлрд╛рдпрд░ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд░реЗрдЧреЗрдХреНрд╕ рдЗрдВрдЬрди рдХреБрдЫ рдЗрдирдкреБрдЯ рдкрд░ рдШрд╛рддреАрдп рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдХрдВрдкрд╛рдЗрд▓ рдХрд░реЗрдВ, рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдпрджрд┐ рдХрдИ рдИрдореЗрд▓ рдХреЛ рдорд╛рдиреНрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдПрдХ рдмрд╛рд░ рдХрдВрдкрд╛рдЗрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
// рдЦрд░рд╛рдм: рд╣рд░ рдХреЙрд▓ рдкрд░ рд░реЗрдЧреЗрдХреНрд╕ рдХреЛ рдХрдВрдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИ
function validateMany(emails) {
return emails.filter(email => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email));
}
// рдЕрдЪреНрдЫрд╛: рдПрдХ рдмрд╛рд░ рдХрдВрдкрд╛рдЗрд▓ рдХрд░реЗрдВ
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
function validateMany(emails) {
return emails.filter(email => emailPattern.test(email));
}
рдмрд▓реНрдХ рд╕рддреНрдпрд╛рдкрди рд░рдгрдиреАрддрд┐рдпрд╛рдВ
рдмрдбрд╝реА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдмрд▓реНрдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рдмреИрдЪреЛрдВ рдореЗрдВ рдкрддреЛрдВ рдХреЛ рдкреНрд░реА-рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ:
async function bulkVerify(emails) {
const syntaxPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
// рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдкреНрд░реА-рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ
const syntaxValid = emails.filter(email =>
syntaxPattern.test(email) && email.length <= 254
);
// рдХреЗрд╡рд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕-рд╡реИрдз рдИрдореЗрд▓ API рдХреЛ рднреЗрдЬреЗрдВ
const results = await billionVerifyBulkCheck(syntaxValid);
// рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ
return emails.map(email => {
if (!syntaxPattern.test(email) || email.length > 254) {
return { email, valid: false, reason: 'Invalid syntax' };
}
return results.find(r => r.email === email);
});
}
рдЕрдкрдиреЗ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛
рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдПрдЬ рдХреЗрд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
рд╡реИрдз рдкрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕
рдЖрдкрдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдЗрди рд╡реИрдз рдкрддреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
simple@example.com very.common@example.com disposable.style.email.with+symbol@example.com other.email-with-hyphen@example.com fully-qualified-domain@example.com user.name+tag+sorting@example.com x@example.com example-indeed@strange-example.com example@s.example user-@example.org postmaster@[123.123.123.123]
рдЕрдорд╛рдиреНрдп рдкрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕
рдЖрдкрдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдЗрди рдЕрдорд╛рдиреНрдп рдкрддреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
Abc.example.com (рдХреЛрдИ @ рд╡рд░реНрдг рдирд╣реАрдВ) A@b@c@example.com (рдПрдХрд╛рдзрд┐рдХ @ рд╡рд░реНрдг) a"b(c)d,e:f;g<h>i[j\k]l@example.com (рдЙрджреНрдзрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг) just"not"right@example.com (рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдХреЗрд▓реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП) this is"not\allowed@example.com (рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЙрджреНрдзрд░рдг) this\ still\"not\\allowed@example.com (рдмреИрдХрд╕реНрд▓реИрд╢) .user@example.com (рдЕрдЧреНрд░рдгреА рдкреАрд░рд┐рдпрдб) user.@example.com (рдЕрдиреБрдЧрд╛рдореА рдкреАрд░рд┐рдпрдб) user..name@example.com (рд▓рдЧрд╛рддрд╛рд░ рдкреАрд░рд┐рдпрдб)
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг
рдЕрдкрдиреЗ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
const validEmails = [
'test@example.com',
'user+tag@domain.org',
'first.last@subdomain.example.co.uk',
// рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕ рдЬреЛрдбрд╝реЗрдВ
];
const invalidEmails = [
'not-an-email',
'missing@tld',
'@no-local-part.com',
// рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╕ рдЬреЛрдбрд╝реЗрдВ
];
describe('Email Syntax Validation', () => {
validEmails.forEach(email => {
it(`should accept ${email}`, () => {
expect(validateEmail(email)).toBe(true);
});
});
invalidEmails.forEach(email => {
it(`should reject ${email}`, () => {
expect(validateEmail(email)).toBe(false);
});
});
});
рд░реАрдпрд▓-рдЯрд╛рдЗрдо рд╕рддреНрдпрд╛рдкрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡
рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдЪреНрдЫреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рддреНрдпрд╛рдкрди рд╕рдордп
рд╣рд░ рдХреАрд╕реНрдЯреНрд░реЛрдХ рдкрд░ рдорд╛рдиреНрдп рди рдХрд░реЗрдВтАФрдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЭрдЯрдХреЗрджрд╛рд░ рдЕрдиреБрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
// рдмреНрд▓рд░ рдкрд░ рдорд╛рдиреНрдп рдХрд░реЗрдВ (рдЬрдм рдлрд╝реАрд▓реНрдб рдлреЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИ)
emailInput.addEventListener('blur', () => {
validateAndShowFeedback(emailInput.value);
});
// рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдорд╛рдиреНрдп рдХрд░реЗрдВ (debounced)
let timeout;
emailInput.addEventListener('input', () => {
clearTimeout(timeout);
timeout = setTimeout(() => {
validateAndShowFeedback(emailInput.value);
}, 500);
});
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕реНрдкрд╖реНрдЯрддрд╛
рдЬрдм рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдкрд╖реНрдЯ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ:
function getValidationMessage(email) {
if (!email.includes('@')) {
return 'рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдИрдореЗрд▓ рдкрддреЗ рдореЗрдВ @ рдкреНрд░рддреАрдХ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ';
}
const [local, domain] = email.split('@');
if (!domain) {
return 'рдХреГрдкрдпрд╛ @ рдкреНрд░рддреАрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдбреЛрдореЗрди рджрд░реНрдЬ рдХрд░реЗрдВ';
}
if (!domain.includes('.')) {
return 'рдХреГрдкрдпрд╛ рдПрдХ рд╡реИрдз рдбреЛрдореЗрди рджрд░реНрдЬ рдХрд░реЗрдВ (рдЙрджрд╛., example.com)';
}
if (email.length > 254) {
return 'рдИрдореЗрд▓ рдкрддрд╛ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ';
}
return 'рдХреГрдкрдпрд╛ рдПрдХ рд╡реИрдз рдИрдореЗрд▓ рдкрддрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ';
}
рджреГрд╢реНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЙрдЪрд┐рдд рджреГрд╢реНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВтАФрд░рдВрдЧ, рдЖрдЗрдХрди, рдФрд░ рдПрдирд┐рдореЗрд╢рди рдЬреЛ рд╡реИрдз рдпрд╛ рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджрдЦрд▓ рджреЗрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд рдИрдореЗрд▓ рдкрддрд╛ рд╕рдорд░реНрдерди
рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЧреИрд░-ASCII рд╡рд░реНрдгреЛрдВ рдпреБрдХреНрдд рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд рдИрдореЗрд▓ рдкрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдмрдврд╝рддреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
EAI рдорд╛рдирдХ
рдИрдореЗрд▓ рдПрдбреНрд░реЗрд╕ рдЗрдВрдЯрд░рдиреЗрд╢рдирд▓рд╛рдЗрдЬреЗрд╢рди (EAI) рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рд▓реЛрдХрд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг
- рдбреЛрдореЗрди рдкрд╛рд░реНрдЯ рдореЗрдВ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд рдбреЛрдореЗрди рдирд╛рдо (IDN)
EAI рдорд╛рдирдХреЛрдВ рдХреЗ рддрд╣рдд чФицИ╖@ф╛ЛхнР.ф╕нхЫ╜ рдЬреИрд╕рд╛ рдкрддрд╛ рд╡реИрдз рд╣реИред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд┐рдЪрд╛рд░
рдЬрдмрдХрд┐ EAI рд╕рдорд░реНрдерди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрди рдХрд╛рд░рдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рд╕рднреА рдореЗрд▓ рд╕рд░реНрд╡рд░ EAI рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
- рдХрдИ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд╕реЗрд╡рд╛рдПрдВ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдкрддреЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВ
- рдЧреИрд░-рд▓реИрдЯрд┐рди рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╡рд┐рдзрд┐рдпрд╛рдВ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ
- рднрдВрдбрд╛рд░рдг рдФрд░ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдпрджрд┐ рдЖрдкрдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдкрдиреА рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕рддреНрдпрд╛рдкрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ EAI рд╕рдорд░реНрдерди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХрд┐рд╕реА рднреА рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд░рдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдХрд╛рд░реНрдп рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИтАФрдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдХрд┐ рдИрдореЗрд▓ рд╕рд╣реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИтАФрдИрдореЗрд▓ рдорд╛рдирдХреЛрдВ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдЬрдЯрд┐рд▓рддрд╛ рдкреИрджрд╛ рдХрд░рддреА рд╣реИрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдПрдХ рдЙрдЪрд┐рдд рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рд╡реИрдз рдИрдореЗрд▓ рдкрддреЛрдВ рдХреА рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╕реНрдкрд╖реНрдЯ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд▓рдВрдмрд╛рдИ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рдФрд░, рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, BillionVerify рдЬреИрд╕реА рдкреЗрд╢реЗрд╡рд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдбреЛрдореЗрди рдЬрд╛рдВрдЪ, SMTP рд╕рддреНрдпрд╛рдкрди, рдФрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреНрд╖рдорддрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рд╣рд┐рдд рдкреВрд░реНрдг рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреЗрд╡рд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХреЛрдИ рдИрдореЗрд▓ рдкрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрддрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рд╕рдЪреНрдЪреЗ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдФрд░ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреВрд░реНрдг рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬрд╛рдВрдЪ, рдбреЛрдореЗрди рд╕рддреНрдпрд╛рдкрди, MX рд░рд┐рдХреЙрд░реНрдб рд╕рддреНрдпрд╛рдкрди, SMTP рд╕рддреНрдпрд╛рдкрди, рдФрд░ рдХреИрдЪ-рдСрд▓ рдбреЛрдореЗрди, рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдИрдореЗрд▓, рдФрд░ рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЬрд╛рдВрдЪред
рдЪрд╛рд╣реЗ рдЖрдк рдПрдХ рд╕рд░рд▓ рд╕рд╛рдЗрдирдЕрдк рдлреЙрд░реНрдо рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВ рдпрд╛ рдПрдХ рдкрд░рд┐рд╖реНрдХреГрдд рдИрдореЗрд▓ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо, рдИрдореЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рдордЭрдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХреЗ рдЙрдЪрд┐рдд рд╕реНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред рдЙрдЪрд┐рдд рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЧрд╣рд░реА рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ рдЬреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рд╕рдЯреАрдХрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рджреЛрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдмрдирд╛рдПрдВ, рд╡рд┐рд╡рд┐рдз рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рджреБрдирд┐рдпрд╛ рдХреЗ рдкрддреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рдФрд░ рдЕрдкрдиреЗ рдИрдореЗрд▓ рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдкреВрд░реНрдг рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП BillionVerify рдЬреИрд╕реЗ рдкреЗрд╢реЗрд╡рд░ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди API рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░реЗрдВред