如何验证输入字符串并将其格式化为1234567890到123-456-7890

时间:2013-10-01 11:29:16

标签: ios uitextfield

我必须将输入字符串格式化为电话号码。因为我正在使用

(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

但它没有编辑回来。

请提出一些想法

2 个答案:

答案 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]];