这是我第一次尝试制作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;
}
答案 0 :(得分:40)
请参阅此答案:https://stackoverflow.com/a/6323208/60488
基本上:
NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789-+()"] invertedSet]] componentsJoinedByString:@""];
对于您的情况,您可能想删除字符" - ","("和")"来自字符集。
答案 1 :(得分: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
答案 2 :(得分:2)
我认为有办法解决这个问题:
textField:shouldChangeCharactersInRange:replacementString:
方法,
检查替换字符串是否在0-9范围内。答案 3 :(得分:1)
我会使用正则表达式来验证电话号码而不是自杀以制作自定义键盘,这些功能可以通过iOS更新来更改。因此,允许所有字符并在代码中进行验证。
答案 4 :(得分:0)
SWIFT 5.0 解决方案
let purePhoneNumber = phoneNumber.replacingOccurrences(of: "[^0-9]",
with: "",
options: .regularExpression)
如果要保留+
登录字符串,可以使用regexp [^0-9+]
。