【问题标题】:Looking to build some regex to validate domain names (RFC 952/ RFC 1123)希望构建一些正则表达式来验证域名(RFC 952/RFC 1123)
【发布时间】:2012-02-09 13:30:11
【问题描述】:

我们的一位客户在通过对我们系统的 API 调用触发电子邮件地址之前,先在他们自己的软件中验证电子邮件地址。然而,问题是他们的验证规则与我们的系统不匹配,因此他们正在解析和接受违反我们规则的地址。这会导致很多失败的调用。

他们正在解析诸如“dave@-whatever.com”之类的内容,这违反了 RFC 952/RFC 1123 规则,因为它以连字符开头。他们要求我们向他们提供我们的正则表达式列表,以便他们可以更新他们平台上的验证以匹配我们的。

所以,我需要找到/构建一个接受的 RFC 952/RFC 1123。我在另一个 SO 线程中发现了这个(我是一个潜伏者 :)),它是否适合并防止这些非法域被发送?

"^(([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])$";

【问题讨论】:

标签: regex api rfc rfc1123


【解决方案1】:

域部分的最大长度为 255 个字符,并且只能由数字、ASCII 字符和连字符组成;连字符不能先出现。

可以使用这个正则表达式检查一个域组件的有效性,不区分大小写,尽管长度:

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

这又是normal* (special normal*)* 模式,normal[a-z0-9],特殊的是-

然后你把这一切都放在另一个normal* (special normal*)* 模式中作为normal 部分,特别是.,并将其锚定在开头和结尾:

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

如果您无法承受不区分大小写的匹配,请将A-Z 添加到字符类中。

但请注意,它不会检查最大长度 255。它可以使用正向前瞻来完成,但正则表达式会变得非常复杂,使用字符串长度函数会更短;)

【讨论】:

  • 域名也可以包含下划线。
猜你喜欢
  • 2015-02-06
  • 2020-02-04
  • 2011-04-09
  • 2016-05-26
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多