在我的应用程序中,我试图检索联系人号码列表并尝试对它们进行操作.我意识到,每当我添加新的联系人(更新到iOS 7之后),新的联系人格式都会发生变化,因为新添加的数字中存在间距.
使用普通替换方法不会删除空格.
这些真的是空间还是这些?我的目标是找回'空间'免费号码.
例如,如果数字是1 818 323 323 323
,我想得到1818323323323
Fen*_*ski 19
我看着这个并没有摆脱'空间',只留下十进制字符.这段代码为我做了这个:
phoneNumberString = [[phoneNumberString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)
这取出了所有不是0-9的数字.
Swift 4.1:
phoneNumberString = phoneNumberString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "")
Run Code Online (Sandbox Code Playgroud)
试试这个:
NSString *cleaned = [[phoneNr componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];
Run Code Online (Sandbox Code Playgroud)
这适用于任何类型的空间(其中有很多空间).这似乎有点低效,但对于电话号码,这应该没问题.
一些iOS7电话号码采用不间断空间进行编码.试试这个:
NSString* stringFormatted = [phoneNumber stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];
Run Code Online (Sandbox Code Playgroud)
经过太多的字符串清理后,我终于在通讯簿中直接打印CFStringRef后找到了答案.这是幕后发生的事情......
要删除\ U00A0,我尝试了3个来自此线程的答案和[NSCharacterSet characterSetWithRange:(160,1)],这些都没有用.最终有效的是这行代码:
phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"." withString:@""];
Run Code Online (Sandbox Code Playgroud)
//其中@"." 是通过键入Option + Spacebar创建的
另一个(非常灵活)选项是使用正则表达式.这允许您保留要保留的+或任何其他字符.
let numberFromAddressBook = "+1 818 323 323 323"
let cleanNumber = numberFromAddressBook.stringByReplacingOccurrencesOfString("[^0-9+]", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range:nil)
"+1818323323323"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5968 次 |
最近记录: |