文本字段验证方法 obj c

textfield verify method obj c

我有一个包含 2 个文本字段和一个按钮的视图。

在 "clickOnDoneButton" 函数中,我必须执行以下功能:我必须使用第二个文本字段验证插入到第一个文本字段中的 pin。 我必须用正确的 "checkValidityPin" 函数验证引脚,我无法正确实现它。 要实现的逻辑是:我检查第一个 "pin" 使用 checkValidityPin 输入,如果它是正确的我检查它与第二个 "pin" 必须相同。

我想我在函数中迷路了我不能再继续了..

    @property (nonatomic, strong) id delegate;
@property (nonatomic, weak) IBOutlet UIButton *confirmButton;
@property (weak, nonatomic) IBOutlet InputTextView *insertPin;
@property (weak, nonatomic) IBOutlet InputTextView *verifyPin;
@property (nonatomic, strong) NSString* stringInserted;

- (IBAction) clickOnDoneButton:(id)sender;


- (IBAction) clickOnDoneButton:(id)sender{
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            NSString * errorMessage = @"";

            if(!self.insertPin || [self.insertPin isEqual:[NSString string]]) {
                self.insertPin = self.stringInserted;
//                [self.insertPin redrawWithInputLength:0];
    //            self.titleLabel.text = NSLocalizedString(@"INSERT_NEW_PIN", nil);
//                [self setTextAnimated:NSLocalizedString(@"INSERT_NEW_PIN", nil)];
//                self.keyboard.confirButton.enabled = NO;
                self.stringInserted = [NSString string];
            } else if(!self.verifyPin || [self.verifyPin isEqual:[NSString string]]) {
                if (![self.stringInserted isEqualToString:self.insertPin]){
                    if([self checkValidityPin:self.stringInserted]){
                        self.verifyPin = _stringInserted;

//                        [self.fieldView redrawWithInputLength:0];
    //                    self.titleLabel.text = NSLocalizedString(@"REINSERT_NEW_PIN", nil);
//                        [self setTextAnimated:NSLocalizedString(@"REINSERT_NEW_PIN", nil)];
//                        self.keyboard.confirButton.enabled = NO;
                        self.stringInserted = [NSString string];
                        NSLog(@"TEST4");
                    }
                    else{
                        errorMessage = NSLocalizedString(@"WRONG_PIN_FORMAT", nil);
                        NSLog(@"TEST2");

                    }
                } else {
                    errorMessage = NSLocalizedString(@"NEW_PIN_EQUALS_OLD", nil);
                    NSLog(@"TEST3");

                }
            }

            else if([self.verifyPin isEqual:self.stringInserted]) {
                NSLog(@"TEST");
            }
            else {
//                [self.fieldView redrawWithInputLength:0];
                self.stringInserted = [NSString string];
                self.insertPin = nil;
                self.verifyPin = nil;
                NSLog(@"TEST1");

//                [self setTextAnimated:NSLocalizedString(@"INSERT_OLD_PIN", nil)];
                //            self.keyboard.confirButton.enabled = NO;
                errorMessage = NSLocalizedString(@"PIN_NOT_EQUALS", nil);
            }

            //Show Error
//            if([errorMessage length]>0){
//                [self showError:errorMessage];
//            }

        }];
}

-(BOOL) checkValidityPin:(NSString*)pin{
    NSString *regex1 = @"^(01234|12345|23456|34567|45678|56789)$";
    NSString *regex2 = @"^(98765|87654|76543|65432|54321|43210)$";
    NSString *regex3 = @"^([0-9])\1*$";

    BOOL testPassed1 = [PRUtility validateRegularExpression:regex1 forString:pin];
    BOOL testPassed2 = [PRUtility validateRegularExpression:regex2 forString:pin];
    BOOL testPassed3 = [PRUtility validateRegularExpression:regex3 forString:pin];

    return !(testPassed1 || testPassed2 || testPassed3);
}

如果你只写代码,很容易迷路。试试先写在"plain language",然后填入代码

例如:

  1. 获取每个输入的字符串

  2. 输入的pin是空的吗?如果是,请通知用户(更新 UI)并且不要进行任何其他检查。

  3. 输入的字符串是否相同?如果不是,请通知用户(更新 UI)并且不要进行任何其他检查。

  4. 字符串相同,请验证输入的密码

  5. pin 格式是否有效?如果没有,请通知用户(更新UI),不要再为其他事情操心。

  6. 引脚匹配并已验证,因此请继续下一步

这里是填写的代码:

- (IBAction)clickOnDoneButton:(id)sender {

    // 1. get each entered string
    NSString *insertPinString = [_insertPin text];
    NSString *verifyPinString = [_verifyPin text];

    // 2. is the entered pin empty?
    if ([insertPinString length] == 0) {
        // inform user he didn't enter a pin
        // update error label or show alert, whatever

        NSLog(@"No Pin Entered");

        // don't bother with anything else
        return;
    }

    // 3. are both entered strings the same?
    if (![insertPinString isEqualToString:verifyPinString]) {
        // inform user the pins don't match
        // update error label or show alert, whatever

        // probably clear both fields
        _insertPin.text = _verifyPin.text = @"";

        NSLog(@"Pin Mismatch");

        // don't bother with anything else
        return;
    }

    // 4. strings are the same, so validate entered pin
    BOOL bValid = [self checkValidityPin:insertPinString];

    // 5. if invalid pin entered
    if (!bValid) {
        // inform user it's an invalid pin format
        // update error label or show alert, whatever

        // probably clear both fields
        _insertPin.text = _verifyPin.text = @"";

        NSLog(@"Invalid Pin");

        // don't bother with anything else
        return;
    }

    // 6. pins match and have been validated so we can proceed with next step
    NSLog(@"Successful pin entry!");

}