Có thể giải pháp tốt hơn là loại bỏ tất cả các ký tự không phải số của số điện thoại để xác thực để bạn chỉ còn lại một chuỗi số.
Cụm từ thông dụng có thể dễ dàng tách ra trừ khi bạn rất nghiêm ngặt với đầu vào của mình và vì số điện thoại thay đổi rất nhiều trên thế giới, theo cách này sẽ cho phép bạn hỗ trợ bất kỳ số điện thoại nào mà không phải tạo biểu thức chính quy phức tạp.
Bạn chỉ có thể sử dụng một phương pháp đơn giản như thế này:
- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber {
NSCharacterSet *illegalCharacters = [NSCharacterSet characterSetWithCharactersInString:@" +()-"];
return [[phoneNumber componentsSeparatedByCharactersInSet:illegalCharacters] componentsJoinedByString:@""];
}
Vì vậy, thay vì +1 (555) 123-4567
Bạn chỉ muốn so sánh 15551234567
. Nếu bạn đang lưu trữ trong cơ sở dữ liệu, bạn có thể muốn kiểm soát định dạng anyways để hiển thị trên giao diện người dùng và so sánh số nguyên nhanh hơn so sánh chuỗi cho tập dữ liệu lớn để bạn có thể lưu [sanitizedPhoneNumber intValue];
trong cơ sở dữ liệu dưới dạng NSNumber
một phương pháp sử dụng một Regex đơn giản chỉ cho phép những con số 0-9 (source):
- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber {
return [phoneNumber stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [phoneNumber length])];
}
nó làm việc cho tôi độc đáo: '\\ ([0-9] {3} \\) \\ s [0-9] {3} - [0-9] {4}'. – holex
hoặc ... nếu bạn muốn đặt khoảng trắng chỉ: '\\ ([0-9] {3} \\) \\ s? [0-9] {3} - [0-9] {4 } ' – holex
hoặc ... nếu bạn muốn cho phép nhiều khoảng trắng:' \ ([0-9] {3} \) (\ s *)? [0-9] {3} - [0-9] {4} '... hoặc tôi nên tạo và trả lời cho họ, phải không? – holex