Fernando Crespo
Fernando Crespo

Reputation: 527

How to remove non numeric characters from phone number in objective-c?

This is my first attempt to make an ios app.

I'm using people picker to ask the user for a phone number, but when it retrieves with the code below, my NSString *phone apears like (0) 111192222-2222. I'm from Brazil and here the correct mask for mobile phone numbers is (01111) 92222-2222 (the 9 is optional, some numbers have others don't). How to fix this mask? Or remove it entirely?

- (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;
}

Upvotes: 15

Views: 10594

Answers (5)

Argus
Argus

Reputation: 2339

SWIFT 5.0 solution

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

If you want to leave + sign in string, you can use regexp [^0-9+].

Upvotes: 0

Johan Kool
Johan Kool

Reputation: 15927

See this answer: https://stackoverflow.com/a/6323208/60488

Basically:

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

For your case you may want to remove the characters "-", "(" and ")" from the character set.

Upvotes: 42

Jason Lee
Jason Lee

Reputation: 3250

I think there are ways to solve this:

  1. Using NSRegularExpression to remove anything but numbers. You can see here or here to know how to validate phone number.
  2. Write your own scanner to remove characters you don't need. Remove blanks or remove all but numbers.
  3. Use the UITextFieldDelegate, write the textField:shouldChangeCharactersInRange:replacementString: method, check the replacement string if it is in the range of 0-9.

Hope helps.

Upvotes: 2

Anoop Vaidya
Anoop Vaidya

Reputation: 46543

You can use few methods of NSString and NSMutableString as :

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

Upvotes: 2

user529543
user529543

Reputation:

I would use Regular expression to validate the phone number instead of killing myself to make a custom keyboard, which functions can be changed by iOS updates. So, allow all characters and validate inside the code.

Upvotes: 1

Related Questions