希望构建一些正则表达式来验证域名(RFC 952 / RFC 1123)

时间:2012-01-13 10:20:52

标签: regex api rfc rfc1123

我们的一位客户在通过对我们的系统的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])$";

1 个答案:

答案 0 :(得分:6)

域名部分的最大长度为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.可以使用正向前瞻来完成,但正则表达式将变得非常复杂,并且使用字符串长度函数会更短;)< / p>