2016-09-06 28 views
0

我正在使用Swift項目,我需要使用此正則表達式來檢查電子郵件是否有效,但是當應用程序開始檢查應用程序崩潰並給出此錯誤時:在Swift中無法執行正則表達式匹配

NSInternalInconsistencyException', reason: 'Can't do regex matching, reason: Can't open pattern U_REGEX_MISSING_CLOSE_BRACKET

這是我的正則表達式:在你的正則表達式模式

^(([^<>()[\\]\\.,;:\\[email protected]\\\"]+(\\.[^<>()[\\]\\.,;:\\[email protected]\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+[\\.]*)+[a-zA-Z]{2,}))$ 
+1

的一點是,你需要逃避'['和']'內的字符類,使用'「^(([^ <>() \\ [\\];:\\小號@ \ 「] +(\\ [^ <>()\\ [\\];:\\小號@ \」] +)*)|(\ 「+ \」))@((\\ [[0-9] {1,3} \\。[0-9] {1,3} \\。[0-9] {1,3} \ \ [0-9] {1,3} \\])|(([A-ZA-Z0-9 - ] + [] *)+ [A-ZA-Z] {2,}))$ 「' –

回答

1

檢查轉義括號:

let pattern 
= "^(([^<>()[\\]\\.,;:\\[email protected]\\\"]+(\\.[^<>()[\\]\\.,;:\\[email protected]\\\"]+)*)|(\\\".+\\\"))" 
// [  [     ]  [  [     ] 
+ "@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+[\\.]*)+[a-zA-Z]{2,}))$" 
//  [ ]  [ ]  [ ]  [ ]   [   ] [ ] [  ] 

你哈在你的模式的前半部分有一些不匹配的括號[ ]

在一些正則表達式的方言中,您不需要在[]之間轉義[,但在其他一些方言中,您需要它。

嘗試添加一些逃脫你的正則表達式:

let pattern 
= "^(([^<>()\\[\\]\\.,;:\\[email protected]\\\"]+(\\.[^<>()\\[\\]\\.,;:\\[email protected]\\\"]+)*)|(\\\".+\\\"))" 
// [  ^^     ]  [  ^^     ] 
+ "@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+[\\.]*)+[a-zA-Z]{2,}))$" 
//  [ ]  [ ]  [ ]  [ ]   [   ] [ ] [  ] 
+0

現在的工作,非常感謝 –