Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios text字段。输入的文本应具有特定格式_Ios_Objective C_Uitextfielddelegate - Fatal编程技术网

Ios text字段。输入的文本应具有特定格式

Ios text字段。输入的文本应具有特定格式,ios,objective-c,uitextfielddelegate,Ios,Objective C,Uitextfielddelegate,我有一个textfield,我希望文本以以下格式输入: aa#####1234 我知道这应该在shouldChangeCharactersInRange委托的文本字段方法中完成。但是我不知道如何在每个字符上实现条件。请给出您的建议。提前感谢 在UITextField上创建类别,并根据需要添加此方法写入条件。下面是电子邮件id的示例: - (BOOL)validateRegEx:(NSString*)regexString { NSError *error = NULL;

我有一个
textfield
,我希望文本以以下格式输入: aa#####1234
我知道这应该在
shouldChangeCharactersInRange
委托
文本字段
方法中完成。但是我不知道如何在每个字符上实现条件。请给出您的建议。提前感谢

在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;
}

试试这个

-(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] ;
}

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

^[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;
}

希望有帮助

显示你的密码你能帮我处理需要在这里执行的正则表达式吗?你能帮我处理需要在这里执行的正则表达式吗?@Prez,我刚刚检查了你的问题内容是否已更改。无论如何,很高兴看到你成功了。谢谢先生……我已经完成了整个过程,但无法理解为什么它会在退格时崩溃。你能为它提供一些指导吗?我当前的解决方案通过
| | string.length==0
范围:NSMakeRange(0,combinedText.length)
支持退格处理。你的代码里也有这个吗?