0

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

(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

但它没有编辑回来。

请给出一些想法

4

2 回答 2

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]];
于 2013-10-01T12:58:08.003 回答
0

您使用的方法是 UITextFieldDelegate 方法,该方法确定是否允许更改文本字段 - 给定范围和替换文本,是否应该进行更改(是或否)。

您正在尝试在键入字符串时对其进行格式化 - 为此,您还需要更新textField.text属性的值。这可以用相同的方法完成,然后返回“NO”。

于 2013-10-01T11:33:54.400 回答