項(xiàng)目中有要輸入電話的地方,要求提交的時(shí)候進(jìn)行校驗(yàn)為手機(jī)號(hào)碼。
其實(shí)就是特殊處理一下通訊錄中帶來(lái)的帶有+86的電話(類似+86?185 xxxx xxxx),然后進(jìn)行正則匹配。直接上代碼。
NSString *telNumber = self.visitorDetailModel.Customer_Tel;
//去除號(hào)碼中的空格
telNumber = [telNumberstringByReplacingOccurrencesOfString:@" " withString:@""];
if([telNumberhasPrefix:@"+86"]) {//如果號(hào)碼中帶有+86,去除+86
? ? ? ? telNumber = [telNumbersubstringFromIndex:3];
}
if (![GMUtilityTool isMobileNumber:telNumber]){//正則匹配是否為正確的手機(jī)號(hào)碼
UIAlertController *vc = [UIAlertController alertControllerWithTitle:@"提示" message:@"請(qǐng)輸入正確的手機(jī)號(hào)碼" preferredStyle:UIAlertControllerStyleAlert];
? ? ? ? UIAlertAction *action = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:nil];
? ? ? ? [vc addAction:action];
? ? ? ? [self presentViewController:vc animated:YES completion:nil];
}
//判斷是否為正確的手機(jī)號(hào)碼的正則
+ (BOOL)isMobileNumber:(NSString*)mobileNum
{
? ? NSString *phoneRegex = @"^1[3456789]\\d{9}$";
? ? NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
? ? return [phoneTestevaluateWithObject:mobileNum];
}
OK,基本上面這樣就完事了。但是最近有用戶在用的時(shí)候反饋輸了正確的11位號(hào)碼,還是不通過(guò),依舊提示請(qǐng)輸入正確的手機(jī)號(hào)碼,并且測(cè)試也沒(méi)測(cè)出來(lái)。
測(cè)試認(rèn)為有空格存在,我說(shuō)我處理了空格,不可能有問(wèn)題的,反復(fù)復(fù)制粘貼過(guò)來(lái)帶空格的號(hào)碼試驗(yàn),依舊沒(méi)事。
最后反復(fù)試了所有的可能之后,發(fā)現(xiàn)從系統(tǒng)通訊錄帶過(guò)來(lái)的帶有+86的號(hào)碼(類似+86?185 xxxx xxxx)的不能通過(guò),所以我懷疑這里面的空格并不是我們平時(shí)手動(dòng)輸入的空格。
用打印地址的方式進(jìn)行了驗(yàn)證


我們可以看到后面兩個(gè)手輸?shù)目崭竦刂芬粯?,但是第一個(gè)從電話里粘貼過(guò)來(lái)的“空格”地址卻不一樣。這貨是一個(gè)長(zhǎng)的跟空格一樣的其他字符。
。。。。。。
沒(méi)辦法在代碼處多加了一行

//去除手動(dòng)輸入的空格
telNumber = [telNumberstringByReplacingOccurrencesOfString:@" " withString:@""];
//去除通訊錄帶來(lái)的坑逼"空格"
telNumber = [telNumberstringByReplacingOccurrencesOfString:@"?" withString:@""];