OGeek|极客世界-中国程序员成长平台

标题: ios - 输入的 Textfield.text 应具有特定格式 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:34
标题: ios - 输入的 Textfield.text 应具有特定格式

我有一个 textfield,我希望在其中输入以下格式的文本: #### 1234 我知道这应该在 textfield.nut 的 shouldChangeCharactersInRange delegate 方法中完成我无法理解如何在每个字符上实现条件.请提出您的建议。提前致谢!



Best Answer-推荐答案


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

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

这里:

一个解决方法的例子可能是这样,这里棘手的部分是允许正在构建的字符串:

- (BOOL)textFieldUITextField *)textField shouldChangeCharactersInRangeNSRange)range replacementStringNSString *)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;
}

希望有帮助!

关于ios - 输入的 Textfield.text 应具有特定格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43625511/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4