15

这是我第一次尝试制作 ios 应用程序。

我正在使用人员选择器向用户询问电话号码,但是当它使用下面的代码检索时,我的NSString *phone显示为 (0) 111192222-2222。我来自巴西,这里正确的手机号码掩码是 (01111) 92222-2222(9 是可选的,有些号码没有其他号码)。如何修复这个面具?还是完全删除?

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
    ABMultiValueRef multiValue = ABRecordCopyValue(person, property);
    CFIndex index = ABMultiValueGetIndexForIdentifier(multiValue, identifier);
    NSString *phone = (__bridge NSString *)ABMultiValueCopyValueAtIndex(multiValue, index);
    return NO;
}
4

5 回答 5

42

看到这个答案:https ://stackoverflow.com/a/6323208/60488

基本上:

NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789-+()"] invertedSet]] componentsJoinedByString:@""];

对于您的情况,您可能希望从字符集中删除字符“-”、“(”和“)”。

于 2013-02-28T03:47:45.970 回答
2

您可以使用一些 NSString 和 NSMutableString 的方法:

NSString *phone=@"(0) 111192222-2222";
//I'm from Brazil and here the correct mask for mobile phone numbers is (01111) 92222-2222
NSMutableString *editPhone=[NSMutableString stringWithString:[phone stringByReplacingOccurrencesOfString:@")" withString:@""]];
editPhone=[NSMutableString stringWithString:[editPhone stringByReplacingOccurrencesOfString:@" " withString:@""]];

[editPhone insertString:@") " atIndex:6];


NSLog(@"%@",editPhone);//(01111) 92222-2222
于 2013-02-28T02:44:47.193 回答
2

我认为有办法解决这个问题:

  1. 使用NSRegularExpression删除除数字之外的任何内容。您可以在此处此处查看以了解如何验证电话号码。
  2. 编写您自己的扫描仪以删除您不需要的字符。删除空格删除除数字以外的所有内容。
  3. 使用UITextFieldDelegate,编写 textField:shouldChangeCharactersInRange:replacementString:方法,检查替换字符串是否在 0-9 范围内。

希望有所帮助。

于 2013-02-28T03:13:59.837 回答
1

我会使用正则表达式来验证电话号码,而不是自杀来制作自定义键盘,iOS 更新可以更改这些功能。因此,允许所有字符并在代码中验证。

于 2013-02-28T02:15:51.333 回答
0

SWIFT 5.0解决方案

let purePhoneNumber = phoneNumber.replacingOccurrences(of: "[^0-9]", 
                                                       with: "", 
                                                       options: .regularExpression)

如果要留下+登录字符串,可以使用 regexp [^0-9+]

于 2019-11-27T11:56:34.333 回答