Если вы включите Юникод для этого регулярного выражения, оно будет соответствовать
Международным символам слова.В основном, алфавит, но не пунктуация.
Это регулярное выражение RFC5322, где [a-zA-Z0-9]
заменено на [^\W_]
, которое вводит конструкцию \w
, которая при использовании в Unicode расширяет допустимые алфавиты
.
Raw:
(?im)^(?=.{1,64}@)(?:("[^"\\]*(?:\\.[^"\\]*)*"@)|((?:[^\W_](?:\.(?!\.)|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)?[^\W_]@))(?=.{1,255}$)(?:(\[(?:\d{1,3}\.){3}\d{1,3}\])|((?:(?=.{1,63}\.)[^\W_][-\w]*[^\W_]*\.)+[^\W_](?:[^\W_]|-){0,22}[^\W_])|((?=.{1,63}$)[^\W_][-\w]*))$
( Не забудьте флаг Unicode )
https://regex101.com/r/98Z0Ls/1
Stringed:
"(?im)^(?=.{1,64}@)(?:(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"@)|((?:[^\\W_](?:\\.(?!\\.)|[-!#\\$%&'\\*\\+/=\\?\\^`\\{\\}\\|~\\w])*)?[^\\W_]@))(?=.{1,255}$)(?:(\\[(?:\\d{1,3}\\.){3}\\d{1,3}\\])|((?:(?=.{1,63}\\.)[^\\W_][-\\w]*[^\\W_]*\\.)+[^\\W_](?:[^\\W_]|-){0,22}[^\\W_])|((?=.{1,63}$)[^\\W_][-\\w]*))$"
Однако я предлагаю заменить [^\W_]
на [\pL\pN]
, чтобы исключить
символы типа lowline, из которых около 2000.
Raw:
(?im)^(?=.{1,64}@)(?:("[^"\\]*(?:\\.[^"\\]*)*"@)|((?:[\pL\pN](?:\.(?!\.)|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)?[\pL\pN]@))(?=.{1,255}$)(?:(\[(?:\d{1,3}\.){3}\d{1,3}\])|((?:(?=.{1,63}\.)[\pL\pN][-\w]*[\pL\pN]*\.)+[\pL\pN](?:[\pL\pN]|-){0,22}[\pL\pN])|((?=.{1,63}$)[\pL\pN][-\w]*))$
https://regex101.com/r/HTqoaT/1
Stringed:
"(?im)^(?=.{1,64}@)(?:(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"@)|((?:[\\pL\\pN](?:\\.(?!\\.)|[-!#\\$%&'\\*\\+/=\\?\\^`\\{\\}\\|~\\w])*)?[\\pL\\pN]@))(?=.{1,255}$)(?:(\\[(?:\\d{1,3}\\.){3}\\d{1,3}\\])|((?:(?=.{1,63}\\.)[\\pL\\pN][-\\w]*[\\pL\\pN]*\\.)+[\\pL\\pN](?:[\\pL\\pN]|-){0,22}[\\pL\\pN])|((?=.{1,63}$)[\\pL\\pN][-\\w]*))$"