2017-08-02 76 views
1

我試圖根據RFC 5322標準驗證電子郵件。我一直在使用下面的C#表達來自http://emailregex.com/兩者在c#中使用正則表達式的電子郵件驗證不在目標c項目中工作

^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$ 

,但每當我試圖在我的目標C iPhone應用程序使用該電子郵件地址,我得到錯誤

enter image description here

有人可以幫助我以及如何改進這個表達,以便我能夠匹配驗證電子郵件符合RFC 5322標準?請記住,這意味着不僅域名而且IP地址的電子郵件也需要被接受,方括號內外。

回答

0

上一個答案是錯誤的。這不是因爲你錯過了一個右括號。 XCode 認爲您錯過了右括號,因爲它誤解了您的報價。由於搶在評論中說,你需要重新格式化哪裏有「或\

+1

對於未來的讀者的利益,不正確的「以前的答案」此處引用隨後被刪除。 – Rob

1

當你把這個表達式模式在字符串文本中,你必須逃脫每"\字符與其他\表達。因此,每個"成爲\"\成爲\\

不幸的是,即使你解決這個問題,那C#再現不NSRegularExpression工作。但是,當我抓住了RFC 5322官方標配from that page you referenced,這在開始添加^後工作, $月末喜歡你顯然沒有,和逃避所有的"\字符:

NSString *pattern = @"^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$"; 
NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error]; 
NSAssert(regex, @"Regex failed: %@", error); 
相關問題