天道酬勤,学无止境

Looking to build some regex to validate domain names (RFC 952/ RFC 1123)

One of our clients validates email addresses in their own software prior to firing it via an API call to our system. The issue is however that their validation rules do not match those our system, therefore they are parsing and accepting addresses which break our rules. This is causing lots of failed calls.

They are parsing stuff like "dave@-whatever.com", this goes against RFC 952/RFC 1123 rules as it begins with a hyphen. They have asked that we provide them with our regex list so they can update validation on their platform to match ours.

So, I need to find/build an RFC 952/RFC 1123 accepted. I found this in another SO thread (i'm a lurker :)), would it be suitable and prevent these illegal domains from being sent?

"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
标签

评论

A domain part has a max length of 255 characters and can only consist of digits, ASCII characters and hyphens; a hyphen cannot come first.

Checking the validity of one domain component can be done using this regex, case insensitive, length notwithstanding:

[a-z0-9]+(-[a-z0-9]+)*

This is the normal* (special normal*)* pattern again, with normal being [a-z0-9] and special being -.

Then you take all this in another normal* (special normal*)* pattern as the normal part, and the special being ., and anchor it at the beginning and end:

^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)+$

If you cannot afford case insensitive matching, add A-Z to the character class.

But please note that it won't check for the max length of 255. It may be done using a positive lookahead, but the regex will become very complicated, and it is shorter to be using a string length function ;)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 寻找主机名/机器名验证的正则表达式/代码(Looking for regex/code for hostname/machine name validation)
    问题 寻找主机名验证正则表达式。 匹配 DNS 主机名或 IP 地址的正则表达式? 在那个链接中,先生们提出了一个不错的正则表达式。 我对此有一些问题/疑问: 在 Windows 计算机/网络上,允许使用1abcd等名称(在我们的本地网络上验证) 在建议的正则表达式中,点可能只出现一次。 我假设abc.def.gh也是一个有效的主机名,不是吗。 奇怪,但也找不到任何可以验证主机名字符串的 .NET 类(是这种情况吗?)。 任何建议将不胜感激。 更新:对于任何类/方法建议 - 请提出一些适用于 .NET/C# 和 SilverLight 的建议。 回答1 在建议的正则表达式中,点可能只出现一次。 我假设 abc.def.gh 也是一个有效的主机名,不是吗。 点可能出现不止一次。 在这里测试正则表达式,你会看到它匹配。 正则表达式的相关片段(第一部分是): ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)* 在 Windows 计算机/网络上,允许使用 1abcd 等名称(在我们的本地网络上验证) 来自维基百科: RFC 952 中主机名的原始规范要求标签不能以数字或连字符开头,也不能以连字符结尾。 但是,随后的规范 (RFC 1123) 允许主机名标签以数字开头。 我参考了 RFC 952。我将尝试更新主机名的正则表达式以符合
  • 完全合格的域名验证(Fully qualified domain name validation)
    问题 有没有一种快速而肮脏的方法来验证是否输入了正确的FQDN? 请记住,没有DNS服务器或Internet连接,因此必须通过regex / awk / sed进行验证。 有任何想法吗? 回答1 如今,有了国际化域名和数千个(!)新TLD变得更加困难。 最简单的部分是您仍然可以在“。”上拆分组件。 您需要可注册TLD的列表。 有一个网站: https://publicsuffix.org/list/effective_tld_names.dat 您只需要检查ICANN认可的证书即可。 请注意,可注册的TLD可以包含多个组件,例如“ co.uk”。 然后是IDN和punycode。 域现在是Unicode。 例如, “ xn--nnx388a”等效于“台湾”。 顺带一提,这两个都是有效的TLD。 有关punycode转换代码,请参阅“ http://golang.org/src/pkg/net/http/cookiejar/punycode.go”。 检查每个域组件的语法也有新规则。 请参阅RFC5890,网址为http://tools.ietf.org/html/rfc5890 组件可以是A标签(仅ASCII)或Unicode。 ASCII标签要么遵循旧语法,要么以“ xn--”开头,在这种情况下,它们是Unicode字符串的punycode版本。 Unicode的规则非常复杂
  • 用于验证DNS标签(主机名)的正则表达式(Regular Expression for validating DNS label ( host name))
    问题 我想仅使用regualr表达式来验证主机名。 主机名(或DNS行话中的“标签”)通常由RFC 952和RFC 1123定义,并且可以由以下有效字符组成。 项目清单 从A到Z; 大写字母从a到z; 小写字母 0至9; 数字字符0到9 -; 短跑 规则说: 主机名(标签)可以以字母或数字开头或结尾主机名(标签)不得以“-”(破折号)开头或结尾主机名(标签)不得包含所有数值主机名(标签)最多可包含63个字符 您将如何编写正则表达式来验证主机名? 回答1 ^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{,63}(?<!-)$ 我使用以下用Python编写的测试平台来验证其是否正常运行: tests = [ ('01010', False), ('abc', True), ('A0c', True), ('A0c-', False), ('-A0c', False), ('A-0c', True), ('o123456701234567012345670123456701234567012345670123456701234567', False), ('o12345670123456701234567012345670123456701234567012345670123456', True), ('', True), ('a', True), ('0--0', True
  • 如何使用正则表达式和 PHP 验证域名?(How to validate a domain name using Regex & Php?)
    问题 我想要一个仅验证域名而不是完整网址的解决方案,以下示例是我正在寻找的: domain.com -> true domain.net -> true domain.org -> true domain.biz -> true domain.co.uk -> true sub.domain.com -> true domain.com/folder -> false domµ*$ain.com -> false 回答1 接受的答案不完整/错误。 正则表达式模式; 不应验证域,例如: -domain.com , domain--.com , -domain-.-.com , domain.000等.. 应该验证域,例如: schools.k12 , newTLD.clothing , good.photography等.. 经过一些进一步的研究; 下面是我能想到的最正确、跨语言和紧凑的模式: ^(?!\-)(?:(?:[a-zA-Z\d][a-zA-Z\d\-]{0,61})?[a-zA-Z\d]\.){1,126}(?!\d+)[a-zA-Z\d]{1,63}$ 此模式符合规范中定义的大多数*规则: 每个标签/级别(由一个点分隔)最多可包含63 个字符。 完整的域名最多可以有127 个级别。 完整的域名在其文本表示中不得超过253 个字符的长度。 每个标签可以由字母
  • 主机名的有效字符?(Valid characters of a hostname?)
    问题 主机名的有效字符是什么? 这就像是联网计算机或Web域。 为了说明这一点,我正在编写一个连接到远程服务器的PC游戏。 所以我有一个用于主机名的字段和一个用于端口的字段。 显然,端口是短范围内的数字,但我需要知道所有可能的主机名字符是什么(以及可能需要的其他任何模式-主机名是否需要以字母开头?)。 主机名的示例包括localhost或google.com 。 回答1 检阅此Wiki,特别是有效主机名的限制部分 主机名由一系列带点的标签组成,所有域名也是如此。 例如,“ en.wikipedia.org”是一个主机名。 每个标签的长度必须在1到63个字符之间,并且整个主机名(包括定界点而不是尾随点)最多具有253个ASCII字符。 协议的Internet标准(要求注释)要求组件主机名标签只能包含ASCII字母“ a”至“ z”(不区分大小写),数字“ 0”至“ 9”以及连字符('-')。 RFC 952中主机名的原始规范要求标签不能以数字或连字符开头,并且不能以连字符结尾。 但是,随后的规范(RFC 1123)允许主机名标签以数字开头。 不允许使用其他符号,标点符号或空格。 回答2 这取决于您是在IDN toASCII算法之前还是之后处理IDN(即,您看到的域名παράδειγμα.δοκιμή是希腊文还是xn--hxajbheg2az3al.xn--jxalpdlp ?)。
  • 检查字符串是否包含 PHP 中的 IPV6 地址(Check if a string contains an IPV6 address in PHP)
    问题 使用 PHP,我需要检查字符串是否包含 IPv6 地址 - 如果包含,则提取该 IPv6 地址。 如果它恰好是 IPv6,我有一个匹配字符串的正则表达式: $matches = []; $regex = '/^(((?=.*(::))(?!.*\3.+\3))\3?|([\dA-F]{1,4}(\3|:\b|$)|\2))(?4){5}((?4){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})\z/i'; preg_match($regex, $ipv6, $matches); 我所坚持的是能够在任一侧添加通配符,因此我可以匹配以下内容: http://2001:0db8:85a3:0000:0000:8a2e:0370:7334/something/page.html http://2001:0db8:85a3:0000:0000:8a2e:0370:7334 2001:0db8:85a3:0000:0000:8a2e:0370:7334/something/page.html 最终我需要这样做,以便我可以在 IPv6 地址周围用方括号括起来,因此它符合 RFC 3986(例如http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/something/page.html )。 回答1
  • 可以在 URL 主机中显示的有效字符是什么?(What are the valid characters that can show up in a URL host?)
    问题 我正在编写一些处理 URL 的代码,我想确保我不会遗漏一些奇怪的案例...... 主机是否有除AZ、0-9、“-”和“.”之外的任何有效字符? (这包括可以在子域中的任何内容等。基本上,在 :// 和第一个 / 之间的任何内容) 谢谢! 回答1 请参阅对有效主机名的限制: 主机名由一系列用点连接的标签组成,所有域名也是如此1。 例如,“en.wikipedia.org”是一个主机名。 每个标签的长度必须在 1 到 63 个字符之间,并且整个主机名最多包含 255 个字符。 RFC 要求主机名的标签只能包含 ASCII 字母“a”到“z”(不区分大小写)、数字“0”到“9”和连字符。 主机名标签不能以连字符开头或结尾。 不允许使用其他符号、标点符号或空格。 回答2 不,仅此而已 如果您喜欢阅读,请参考:http://www.ietf.org/rfc/rfc1034.txt 回答3 取决于您在哪个级别进行验证(在 URL 转义之前或之后)。 如果您尝试验证用户输入,那么它可以超越 ASCII(带有大量 Unicode)。 见 http://en.wikipedia.org/wiki/Internationalized_domain_name 如果您在所有转义和“punycode”完成后尝试验证,则验证没有意义,因为旧的 RFC 已经保证它只包含有效字符。 回答4 请记住,除了
  • 正则表达式匹配DNS主机名或IP地址?(Regular expression to match DNS hostname or IP Address?)
    问题 是否有人方便使用与任何合法DNS主机名或IP地址匹配的正则表达式? 编写可以在95%的时间内正常工作的代码很容易,但是我希望得到经过良好测试的东西,以与DNS主机名的最新RFC规范完全匹配。 回答1 您可以单独使用以下正则表达式,也可以将它们组合在联合OR表达式中。 ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"; ValidIpAddressRegex匹配有效的IP地址和ValidHostnameRegex的有效主机名。 根据使用的语言,\可能必须使用\进行转义。 ValidHostnameRegex根据RFC 1123有效。最初,RFC 952指定主机名段不能以数字开头。 http://en.wikipedia.org/wiki/主机名 RFC 952中主机名的原始规范要求标签不能以数字或连字符开头
  • (域名)子域中可以有下划线“ _”吗?(Can (domain name) subdomains have an underscore “_” in it?)
    问题 子域名(域名)中可以有下划线_吗? 回答1 这里给出的大多数答案都是错误的。 在域名中加下划线是完全合法的。 让我引用标准RFC 2181第11节“名称语法”: DNS本身对可用于标识资源记录的特定标签仅设置了一个限制。 这一限制与标签的长度和全名有关。 daccess-ods.un.org daccess-ods.un.org DNS协议的实现不得对可使用的标签施加任何限制。 特别是,DNS服务器不得拒绝为区域提供服务,因为该区域包含某些DNS客户端程序可能不接受的标签。 另请参阅原始DNS规范RFC 1034,第3.5节“首选名称语法”,但请仔细阅读。 带下划线的域在野外很常见。 检查_jabber._tcp.gmail.com或_sip._udp.apnic.net 。 这里提到的其他RFC处理不同的事情。 最初的问题是域名。 如果问题是关于主机名(或包含主机名的URL),则此问题有所不同,相关标准为RFC 1123第2.1节“主机名和数字”,该限制将主机名限制为字母数字连字符。 回答2 关于术语的注释,以进一步支持Bortzmeyer的回答 应该清楚定义。 如此处所用: 域名是DNS数据库中资源的标识符标签是域名中点之间的一部分主机名是一种特殊类型的域名,用于标识Internet主机 主机名受RFC 952的限制和RFC 1123的轻微放宽 RFC 2181明确指出
  • 如何在PHP中验证域名?(How to validate domain name in PHP?)
    问题 是否可以不使用正则表达式? 例如,我要检查字符串是否为有效域: domain-name abcd example 是有效的域。 这些当然是无效的: domaia@name ab$%cd 等等。 因此,基本上应该以字母数字字符开头,然后可能会有更多的字母字符和连字符。 并且它也必须以数字字符结尾。 如果不可能,您可以建议我使用正则表达式模式来做到这一点吗? 编辑: 为什么不起作用? 我使用的preg_match不正确吗? $domain = '@djkal'; $regexp = '/^[a-zA-Z0-9][a-zA-Z0-9\-\_]+[a-zA-Z0-9]$/'; if (false === preg_match($regexp, $domain)) { throw new Exception('Domain invalid'); } 回答1 <?php function is_valid_domain_name($domain_name) { return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check && preg_match("/^.{1,253}$/", $domain_name) //overall
  • 什么是最小的有效域名?(What is smallest valid domain name?)
    问题
  • 什么是匹配有效域名而不包含子域的正则表达式?(What is a regular expression which will match a valid domain name without a subdomain?)
    问题 我需要验证域名: google.com stackoverflow.com 因此,最原始形式的域-甚至没有像www这样的子域。 字符只能是az | AZ | 0-9和句点(。)和破折号(-) 域名部分不应以破折号(-)开头或结尾(例如-google-.com) 域名部分的长度应在1到63个字符之间目前,扩展名(TLD)可以是#1规则下的任何内容,我稍后可能会针对列表进行验证,尽管它应为1个或多个字符 编辑:TLD显然是2-6个字符 不。 4修订版: TLD应该实际上被标记为“子域”,因为它应该包括.co.uk之类的东西-我想唯一可能的验证(除了检查列表之外)是“在第一个点之后应该有一个或规则1下的其他字符 非常感谢,相信我,我确实尝试过! 回答1 嗯,这是非常简单的一点点sneakier比它的外观(见注释),给予您的具体要求: /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/ 但是请注意,这将拒绝许多有效域。 回答2 我知道这是一个过时的帖子,但是这里的所有正则表达式都缺少一个非常重要的组成部分:对IDN域名的支持。 IDN域名以xn--开头。 它们在域名中启用扩展的UTF-8字符。 例如,您是否知道“♡.com”是有效的域名? 是的,“ love heart dot com”! 要验证域名,您需要让http
  • 主机名中下划线的使用(The use of the underscore in host names)
    问题 维基百科指出,Android 和 Microsoft Windows 系统在主​​机名中都使用下划线。 我的问题是,这些主机名是什么? 你有这些奇怪的主机名的例子以及它们的用途吗? 回答1 What are host names? 类似于学校教室,每个学生都有一个卷号/ID,以便识别他/她,在互联网教室(或就此而言,任何计算机网络)中,网络中的每个设备都需要唯一识别. 这是通过Host Name 完成的。 因此,主机名是有助于识别网络中设备的名称。 Hostnames with underscore(_) character. 在为有效和无效hostnames制定标准期间,通用终端接口是电传打字机 (TTY) ASR-33 的键盘。 现在这个键盘从来没有下划线(_)键(检查这张图片http://www.pdp8.net/asr33/pics/kbd_top.shtml?large),因此不可能有一个带下划线的hostname (_) 在里面。 查看此链接了解更多详情:http://www.quora.com/Domain-Name-System-DNS/Why-are-underscores-not-allowed-in-DNS-host-names 域名中可以使用下划线(_)字符。 正如这篇文章所述,(域名)子域中可以有下划线“_”吗? 有下划线是完全有效的。 一些示例
  • “UTC”是 RFC 1123 规范的有效时区名称吗?(Is "UTC" a valid timezone name for RFC 1123 specification?)
    问题 我正在处理一个 API,它请求 RFC 1123 日期。 如果我发送请求的日期为Thu, 04 Sep 2014 06:42:22 UTC它会因为"UTC"部分而被拒绝。 如果我操作字符串并使时区部分为"GMT"它就可以工作。 我还注意到许多语言(Java、C#、Python)正在使用时区字符串"GMT"以 RFC 1123 格式格式化 UTC 日期,但是我使用的语言 Go 将其保留为"UTC" 。 我试图了解它是否是语言错误或"UTC"不应该根据 RFC 使用:http://www.ietf.org/rfc/rfc1123.txt 回答1 简答 使用UT或GMT而不是UTC 。 RFC 1123 我对 RFC 1123 的理解是它采用 RFC 822 作为日期时间格式,除了调整。 RFC 822 RFC 822 不包含单词UTC 。 相反,第 25 页提到UT是GMT的同义词。 所以你可以使用UT但不能使用UTC 。 RFC 2822 此外,RFC 822 被 RFC 2822 取代(是的,可爱的编号)。 该规范在定义时区偏移时仅提及 UTC 一次。 但是这个规范没有在格式中添加UTC作为标识符。 所以同样的规则,在你的字符串中只使用GMT或UT 。 ISO 8601 这种由 RFC 822 和 1123 定义的格式很糟糕。 难以阅读,难以解析,假设英语语言和文化
  • 电子邮件地址验证方法(订阅按钮)(Email address validation methods (Subscribe button))
    问题 我正在用 php 编写一个网站,我目前在联系我们页面上,我想知道验证电子邮件地址的最佳方法是什么? 通过向他们的电子邮件发送验证链接? 正则表达式还有其他方法吗? 你也能告诉我为什么以及我实现它的指南吗? 我不希望有人为我编写代码,因为这对我来说并不有趣,我不会学习,而只是对用于实现上述方法的技术的一些指导。 此外,我将使用这些方法在我的网页上实现订阅按钮。 这是最好的方法吗? 我应该考虑任何其他方法吗? 回答1 我通常会经过这些步骤 正则表达式发送激活码到邮箱 如果第一步失败,它永远不会到达第二步。 如果电子邮件发送失败,因为电子邮件不存在我删除帐户或做一些其他的事情 - 编辑 3 - 如果由于某种原因没有发送激活电子邮件,电子邮件没有被删除,它会在 7 天(或根据您的配置)未获批准,在这些天之后每 2-3 小时尝试重新发送一次电子邮件如果不成功,电子邮件将被删除 4 - 如果电子邮件发送成功但未激活,则它保持未批准状态,但可以通过生成新的激活码随时重新激活 回答2 我认为最好的是 3. 和 1 的组合。 在初始阶段,您在语法上验证电子邮件(以发现拼写错误): filter_var($email, FILTER_VALIDATE_EMAIL) 然后,您发送一封带有确认地址的电子邮件(以捕获错误和故意错误的信息)。 回答3 最好的方法是发送一封带有验证链接的电子邮件。 至少
  • 什么是符合 RFC 标准且可用于检查字符串是否为有效 URL 的工作正则表达式(What is the RFC compliant and working regular expression to check if a string is a valid URL)
    问题 已经有一个几乎同名的问题:检查字符串是否为有效 URL 的最佳正则表达式是什么 我不明白这个stackoverflow。 似乎我需要声誉来评论答案。 由于我没有它,我不知道如何告诉/询问建议的解决方案似乎不起作用。 所以我被迫提出一个新问题并以这种方式寻求解决方案? 更新:所以似乎 Reg Exp 支持 IPV6,我应该受到指责,因为 IPv6 应该像 http://[2620:0:1cfe:face:b00c::3]/。 所以我现在唯一知道的真正问题是,它接受 example.org: 作为有效 URL。 或者是 PHP 的罪魁祸首? /** * Validate URL - RFC 3987 (IRI) * * https://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to-check-if-a-string-is-a-valid-url * * @param string $str_url * @return boolean */ function is_url($str_url) { // RFC 3987 For absolute IRIs (internationalized): return (bool) preg_match('/^[a-z](?:[-a-z0
  • 根据RFC5321 / RFC5322对电子邮件地址进行正则表达式验证(Regex validation of email addresses according to RFC5321/RFC5322)
    问题 有谁知道根据RFC5321 / RFC5322验证电子邮件地址的正则表达式? 由于(稳定的)注释使语法不规则,因此仅应考虑没有注释的地址。 当然,如果您有兴趣验证某人实际拥有的地址,那么唯一真正的验证就是向该地址发送电子邮件,并检查所有者是否收到了该地址。 但是,我对RFC标准完全感兴趣。 对于实际方法来说,这个问题更为相关。 除了评论,我愿意牺牲折叠的空白,但是除此之外,我对拒绝任何RFC5321 / 2有效地址的表达式不感兴趣。 (可以说,在某些情况下,忽略折叠的空白甚至更有意义。) 理想情况下,正则表达式将拒绝所有不符合RFC要求的内容,但这并不重要。 例如,在正则表达式中包含详尽的顶级域名列表并不是很有趣。 只需接受任何顶级域就足够了。 我不确定地址标记(例如address+tag@domain.org)是否是我提到的RFC的一部分,但是我希望regex对其进行验证。 必须明确地正确处理IPv6(RFC5952)。 据我了解,国际化电子邮件(RFC6530,RFC6531,RFC6532,RFC6533)仍处于试验阶段,但是验证这些地址的表达式也将很有趣。 为了使答案普遍有趣,如果任何正则表达式为POSIX格式,那将是很好的。 回答1 可嵌套的注释使电子邮件地址的语法不规则(无上下文)。 但是,如果您排除注释,则语法是正常的。 主要定义允许词汇标记(例如a @ b
  • 使用下划线“_”作为 SNI 服务器名称的一部分时,JVM 崩溃(JVM crashes using underline '_' as part of SNI server name)
    问题
  • Regex validation of email addresses according to RFC5321/RFC5322
    Does anyone know a regex that validates email addresses according to RFC5321/RFC5322? Since (nestable) comments make the grammar irregular, only addresses without comments should be regarded. Of course, if you're interested in validating an address that is actually owned by someone then the only real validation is to send an email to the address and check if the owner received it. I am however purely interested in the RFC standards. For a practical approach this question is more relevant. On top of comments I am willing to sacrifice folding white space, but apart from that I'm not interested
  • 为什么 jQuery 的电子邮件验证正则表达式如此简单?(Why is jQuery's email validation regex so simple?)
    问题 我们都知道正确验证电子邮件的正则表达式会非常复杂。 然而,jQuery 的验证插件有一个更短的正则表达式(由 Scott Gonzalez 提供) ,只有几行: /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]) +(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)| ((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21| [\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f] |[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)? (\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-