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