NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})";
已經找到了0領先或龍頭+44一次,爲什麼再次搜索呢?
基本簡化導致
NSString * regex = @"((07|00440?7|\\+440?7)\\d{9})";
然後
NSString * regex = @"((07|(00|\\+)440?7)\\d{9})";
然後
NSString * regex = @"((0|(00|\\+)440?)7\\d{9})";
但00不是唯一的共同撥號前綴,011在美國使用和加拿大。
並稱,和輪轉動的順序,得到:
NSString * regex = @"(^((0(0|11)|\\+)440?|0)7\\d{9}$)";
或優選
NSString * regex = @"(^(?:(?:0(?:0|11)|\\+)(44)0?|0)(7\\d{9}$))";
允許00447,011447,447,004407,0114407,4407,07在開始,並與非捕獲組。
對於較寬的輸入格式匹配,允許不同的標點符號(連字符,括號,空格)使用
NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7\\d{9})$)";
提取$ 1的44個國家或地區代碼(如果爲空號輸入爲07 ...)和10數字爲2美元的NSN。
但是,請注意,從070和076(除07624之外)開始的數字不是手機號碼。
最終圖案:
NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7([1-5789]\\d{2}|624)\\)?[\\s-]?\\d{6}))$)";
提取NSN在$ 2,則從中除去所有的非數字用於進一步處理。
不可能使用正則表達式嗎?請讓我知道 – user198725878