2012-01-13 26 views
1

我們的一個客戶在通過API調用我們的系統之前,在他們自己的軟件中驗證電子郵件地址。但問題是他們的驗證規則與我們的系統不匹配,因此他們正在解析並接受破壞我們規則的地址。這導致很多失敗的呼叫。想要建立一些正則表達式來驗證域名(RFC 952/RFC 1123)

他們正在解析諸如「[email protected]」之類的東西,這違背了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

另請參閱http://stackoverflow.com/questions/4320574/why-is-jquerys-email-validation-regex-so-simple和html5規範http://www.whatwg.org/specs/web -apps /電流工作/多頁/狀態的最型attribute.html#電子郵件國有%28type =電子郵件%29 – goodeye 2013-12-10 16:13:02

回答

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.它可以使用正向預測來完成,但正則表達式將變得非常複雜,並且使用字符串長度函數的時間會更短;)