1

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

1 回答 1

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。可以使用正向前瞻来完成,但正则表达式会变得非常复杂,并且使用字符串长度函数会更短;)

于 2012-01-13T10:35:17.990 回答