UITextField手机号码输入限制

来源:互联网 发布:知らない打ち合わせ 编辑:程序博客网 时间:2024/05/23 17:03

/// 输入限制(回调方法中使用“- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string”

///手机号输入限制

- (BOOL)limitMoblieShouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

    if ([self isFirstResponder])

    {

        NSCharacterSet *firstSet = [NSCharacterSet characterSetWithCharactersInString:@"1"];

        NSCharacterSet *middleSet = [NSCharacterSet characterSetWithCharactersInString:@"345678"];

        NSCharacterSet *lastSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

        

        NSString *tempStr = [self.text stringByReplacingCharactersInRange:range withString:string];

        NSLog(@"text(length = %ld) %@", tempStr.length, tempStr);

        

        // 手机号输入限制

        if (1 < tempStr.length)

        {

            // 光标移动到首位时,输入只能为1

            NSString *firstStr = [tempStr substringToIndex:1];

            NSRange firstRange = [firstStr rangeOfCharacterFromSet:firstSet];

            if (firstRange.location == NSNotFound)

            {

                return NO;

            }

            

            // 第二位输入为3-9

            NSString *middleStr = [tempStr substringWithRange:NSMakeRange(1, 1)];

            if (middleStr && 0 != middleStr.length)

            {

                NSRange middleRange = [middleStr rangeOfCharacterFromSet:middleSet];

                if (middleRange.location == NSNotFound)

                {

                    return NO;

                }

            }

            

            // 3~11位输入为0~9

            NSString *lastStr = [tempStr substringFromIndex:2];

            if (lastStr && 0 != lastStr.length)

            {

                NSRange lastRange = [lastStr rangeOfCharacterFromSet:lastSet];

                if (lastRange.location == NSNotFound)

                {

                    return NO;

                }

            }

        }

        else if (1 == tempStr.length)

        {

            // 首位只能输入1

            NSRange firstRange = [tempStr rangeOfCharacterFromSet:firstSet];

            if (firstRange.location == NSNotFound)

            {

                return NO;

            }

        }

        

        // 手机号最多11

        if (11 < tempStr.length)

        {

            self.text = [tempStr substringToIndex:11];

            return NO;

        }

    }

    

    return YES;

}

0 0
原创粉丝点击