我必须将输入字符串格式化为电话号码。因为我正在使用
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [textField.text length] + [string length] - range.length;
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
if (string.length==3||string.length==7) {
filtered =[filtered stringByAppendingString:@"-"];
}
return (([string isEqualToString:filtered])&&(newLength <= CHARACTER_LIMIT));
}
这里
#define NUMBERS_ONLY @"1234567890-"
#define CHARACTER_LIMIT 12
但它没有编辑回来。
请提出一些想法
答案 0 :(得分:0)
您正在使用的方法是UITextFieldDelegate方法,该方法确定是否允许更改文本字段 - 给定范围和替换文本,如果进行了更改(是或否)。
您正在尝试在键入字符串时格式化字符串 - 为此,您还需要更新textField.text
属性的值。这可以通过相同的方法完成,然后返回“否”。
答案 1 :(得分:0)
进行验证,
- (BOOL) isValidPhoneNumber
{
NSString *numberRegex = @"(([+]{1}|[0]{2}){0,1}+[0]{1}){0,1}+[ ]{0,1}+(?:[-( ]{0,1}[0-9]{3}[-) ]{0,1}){0,1}+[ ]{0,1}+[0-9]{2,3}+[0-9- ]{4,8}";
NSPredicate *numberTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",numberRegex];
return [numberTest evaluateWithObject:self.inputString];
}
您可以使用它来格式化字符串
self.inputString = @"1234567890"
NSArray *stringComponents = [NSArray arrayWithObjects:[self.inputString substringWithRange:NSMakeRange(0, 3)],
[self.inputString substringWithRange:NSMakeRange(3, 3)],
[self.inputString substringWithRange:NSMakeRange(6, [self.inputString length]-6)], nil];
NSString *formattedString = [NSString stringWithFormat:@"%@-%@-%@", [stringComponents objectAtIndex:0], [stringComponents objectAtIndex:1], [stringComponents objectAtIndex:2]];