絕大多數註冊類應用都會選擇使用手機號作為使用者的註冊的賬號,由於鍵盤上有限的字元基本都是常用的手動輸入的手機號的合法性比較容易控制.但是如果使用者選擇貼上的複製的方式就會混進來一些特殊的字元造成判斷上的異常.
在自帶系統是ios 11.0+的裝置上覆制聯絡歷史中的手機號時,發現複製之後的手機號出了空格之外的部分並不是11位.
uipasteboard *sb = [uipasteboard generalpasteboard];
nsstring *content = [sb.string stringbyreplacingoccurrencesofstring:@" " withstring:@""];
nslog(@"length == %@", @(content.length));
char charatgivenindex;
for (int index = 0; index < content.length; index++)
輸出結果:
length == 13
- 18 4
1 34 8
0 44 8
,
在字元的首尾多出了非數字非空格的字元,如果使用只識別數字和空格的正規表示式來匹配時就會出現結果不匹配的情況,從而導致異常.
那麼如何處理非法字元呢?
在字串的處理中已經提供了可用的方法,常用的有以下兩種:
nscharacterset *characterset = [[nscharacterset charactersetwithcharactersinstring:@"0123456789"] invertedset]; //除數字之外的其他字元均為非法字元,使用invertedset方法進行字符集反轉
nsarray*allelements = [content componentsseparatedbycharactersinset:characterset]; //使用非法字元的字符集分割原始字串得到合法字元(串)陣列
nsstring *result = [allelements componentsjoinedbystring:@""]; //使用空字元拼接合法字串陣列得到合法字元組成的字串
nslog(@"result == %@", result);
nscharacterset *characterset = [[nscharacterset charactersetwithcharactersinstring:@"0123456789 "] invertedset]; //使用字符集invertedset方法反轉字符集
nsstring *result = [content stringbytrimmingcharactersinset:characterset]; //去除字串首尾的不合法字元
nslog(@"result == %@", result);
這種現象在獲取裝置通訊錄中聯絡人時也經常遇到.
- (void)contactpicker:(cncontactpickerviewcontroller *)picker didselectcontact:(cncontact *)contact
}
輸出結果:
label == _$!!$_
phone == 18413480448
所以如果想要分離label中的有效字串就可以同樣適用上邊的方法:
nsstring *label = value.label;
label = [label stringbytrimmingcharactersinset:[nscharacterset charactersetwithcharactersinstring:@"_$!<>"]];
nslog(@"label == %@", label);
單鏈表通訊錄 通訊錄2 0
單鏈表通訊錄 通訊錄2.0 標頭檔案 ifndef address h define address h include include include define success 10000 define failure 10001 define true 10002 define false ...
通訊錄問題
include using namespace std include include typedef struct lnodelnode,linklist 通訊錄的建立 void createlist l linklist l,int n createlist l 通訊者結點的插入 void li...
靜態通訊錄
這個通訊錄存粹用到c的知識就可以,主要就是乙個聯絡人資訊結構體,再就是乙個結構體陣列,對結構體陣列反覆操作 進行增 刪 查 改 排序 由於是初學者還不能對中文名進行排序 清空寫等功能。在這裡我們可以盡量寫的正式一點 所以我們用contact.h頭檔案建立結構體和對函式進行宣告 conteact.c中...