用系统数字键盘更容易实现验证码等的校验

本文介绍了一种iOS应用中验证码校验的实现方法,确保用户输入符合要求的六位纯数字验证码,并通过UI反馈错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          我是iOS开发。在开发新的需求时,有对验证码的校验。以此为例,来说说我是如何校验的。

          首先,我从用户体验入手。需求中,1.验证码要求是纯数字,且为六位。2.当验证码框为nil时,下一步按钮不能使用。3.验证码框有且仅能输入六位数字。4.如果用户输入验证码错误,要显示行小红字,提醒用户。

         自我设计是这样的:当用户输入非数字(字母,标点,特殊符号,空格等)时,小红字出现,提醒用户“验证码是六位纯数字”。直到用户修改错误的验证码为止,小红字消失。直到用户输入六位数字验证码时,下一步按钮才可用。点击下一步,发送网络请求,如果验证码错误,则显示小红字,提示“验证码错误”。

        我选用系统数字键盘来配合输入框完成上述需求。

        我实现了输入框UITextField协议:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

     //保证输入框中只能输入六位

    if ((range.location >= 6 || textField.text.length >= 6) && ![string isEqualToString:@""]) {

        return NO;

    }

    //非数字报错

    if (![string isEqualToString:@""]) {//添加时,除了敲空格键,其余string不为空

        if (![string isEqualToString:@"0"]) {

            int value = [string intValue];//非数字的string,经过intValue方法,返回均为0

            if (!value) {

                self.errorText.hidden = NO;

                [self.errorText setTitle:@"错误!验证码为6位纯数字" forState:UIControlStateDisabled];

                [self.errorLocationArr addObject:@(range.location)];//将错误输入的位置记录在array中

            }

        }

    }else{//删除时,string 为空

        

        if ([self.errorLocationArr containsObject:@(range.location)]) {//查看删除的位置,是否包含非法字符,如果有,则将array中记录非法字符的位置删除。

            [self.errorLocationArr removeObject:@(range.location)];

        }

        if (self.errorLocationArr.count == 0) {//记录非法字符的array清空后,就错误提示消失。

            self.errorText.hidden = YES;

        }

    }

    

    if (textField.text.length == 5 && ![string isEqualToString:@""] && self.errorText.hidden) {

        

        [self nextBtn:self.nextBtn status:YES];//输入框中内容符合条件,下一步按钮可用

    }else{

        

        [self nextBtn:self.nextBtn status:NO];//输入框中内容不符合条件,下一步按钮不可用

    }

    

    return YES;

}

//点击clear按钮,触发事件

- (BOOL)textFieldShouldClear:(UITextField *)textField {

    

    self.errorText.hidden = YES;

    [self nextBtn:self.nextBtn status:NO];

    return YES;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值