开篇是这样的,由于一个客户使用手机号登录的时候复制了手机通讯录里面的号码,导致登录失败,服务器识别不出用户的登录手机号,操作如下:
我们知道,通过 encodeURIComponent 可把字符串作为 URI 组件进行编码,但不会对 ASCII 的字母、数字和- _ . ! ~ * ' ( ) 这些特殊的字符进行编码,其余的全部使用十六进制编码表示,如空格将被转换为 %20,但 %E2%80%AD 和 %E2%80%AC 是从什么转换过来的就有意思了,一个「看不见」且「不占空间」的字符!
以上内容部分出处来自:https://github.com/zwwill/blog/issues/12
具体解决思路就是通过比对0~9重新组装一个字符串出来,代码如下:
/// 过滤苹果通讯录自带的隐藏字符,使用数字提取获得号码
+ (NSString *)FiltrationPhoneNumberHideStr:(NSString *)phoneNumber; {
NSString *str = [[NSString alloc] init];
NSArray *Numbers = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0"];
for (int i = 0; i<phoneNumber.length; i++) {
NSString *character = [phoneNumber substringWithRange:NSMakeRange(i, 1)];
for (NSString *number in Numbers) {
if ([character isEqualToString:number]) {
str = [str stringByAppendingString:character];
}
}
}
return str;
}
复制代码
如果有什么错漏或者表述不清楚欢迎留言!