的TextField.text进入应该有特定的格式

问题描述:

我有一个textfield,我想在这上面输入的格式文本: AA #### 1234 我知道这应该shouldChangeCharactersInRange委托方法来实现textfield .nut我无法理解每个角色的状态将如何实施。请给予您的建议。提前感谢!的TextField.text进入应该有特定的格式

+1

显示您的尝试代码 –

,可以有助于验证您的需求的表达可能是:

^[a-z]{2}\s\d{4}\s\d{4}$ 

这里:

  • ^ - 显示字符串
  • [a-z]{2}的开始 - 显示A-Z之间的任何字符恰好2倍
  • \s - 显示空白字符一次。
  • \d{4} - 显示0-9的任何数字,正好4次。
  • $ - 显示字符串

末作为一种解决方法的一个例子可能是这样,这里的棘手的部分是让施工串下:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSError *error = NULL; 
    NSRegularExpression *regex = nil; 

    NSMutableString *combinedText = [textField.text mutableCopy]; 
    [combinedText replaceCharactersInRange:range withString:string]; 

    switch (combinedText.length) { 
     case 1: 
     case 2: 
      regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{%ld}", (long)combinedText.length] options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 3: 
      regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-z]{2}\\s" options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 4: 
     case 5: 
     case 6: 
     case 7: 
      regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{2}\\s\\d{%ld}", (long)combinedText.length - 3] options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 8: 
      regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-z]{2}\\s\\d{4}\\s" options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     case 9: 
     case 10: 
     case 11: 
     case 12: 
      regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{2}\\s\\d{4}\\s\\d{%ld}$", (long)combinedText.length - 8] options:NSRegularExpressionCaseInsensitive error:&error]; 
      break; 
     default: 
      return false; 
    } 

    if(error) return false;   

    NSUInteger numberOfMatches = [regex numberOfMatchesInString:combinedText options:0 range:NSMakeRange(0, combinedText.length)]; 
    return numberOfMatches > 0 || string.length == 0; 
} 

希望帮助!

+0

@Prez,我刚刚检查了您的问题内容已更改。无论如何,很高兴看到你做到了。 – NeverHopeless

+0

谢谢先生......我已经完成了全部工作,但无法理解为什么它会在退格时崩溃。请给我提供一些指导吗? – Prez

+0

我的当前解决方案支持'||的帮助退格处理string.length == 0'和'range:NSMakeRange(0,combinedText.length)'。你的代码中是否也有这个? – NeverHopeless

在UITextField上创建类别并根据您的要求添加此方法写入条件。下面的例子电子邮件ID:

- (BOOL)validateRegEx:(NSString*)regexString 
{ 
    NSError *error = NULL; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString 
                     options:NSRegularExpressionCaseInsensitive 
                     error:&error]; 
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:self.text 
                options:0 
                 range:NSMakeRange(0, [self.text length])]; 

    return numberOfMatches > 0; 
} 
+0

你能帮助我在这里需要实现的正则表达式吗? – Prez

试试这个

-(BOOL)checkString:(NSString *)str{ 
    NSString *regex1 = @"^[a-bA-B0-9]"; // chabge regex as per your needs 
    NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1]; 
    return [test1 evaluateWithObject:str] ; 
} 
+0

你能帮助我在这里需要实现的正则表达式吗? – Prez

+0

当然。等我在这里更新。 – KKRocks