最近,测试反馈一个bug:iOS11系统,从手机通讯录拷贝一个手机号码到输入框后,手机格式校验失败。
跟进了一下,发现拷贝后的号码信息前后各加了一个字符,如下:
前面增加了:\U202d
后面增加了:\U202c
这两个字符在UI上是不展示的,所以看起来像是开发人员正则表达式的锅。
解决方案是在格式校验前,先把数字之外的信息加以过滤,代码如下:
+ (NSString *)clearNumberForIOS11:(NSString *)str {
if ([str isKindOfClass:[NSString class]]) {
return [[str componentsSeparatedByCharactersInSet:
[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]] componentsJoinedByString:@""];
} else {
return str;
}
}
另外一篇文章的作者也发现了这个问题:
IOS 11 通讯录手机号「隐形字符」的 Bug,Apple 真的不打算修复了吗?