携手创造,一起生长!这是我参加「日新计划 8 月更文挑战」的第16天,点击查看活动概况

前语

运用手机进行登录注册的时候,需要对张贴的内容进行手机号码提取。

使用场景: 登陆界面、注册界面

iOS小技能:提取数字(文本框对粘贴内容进行手机号码提取)

文本输入框对手机号码的处理逻辑:

1、引荐对张贴内容进行提取设置 2、键盘为UIKeyboardTypeNumberPad即可 3、提交数据之前才进行正则的校验(或许只判别是否长度为11)

I、实现细节

1.1. 提取手机号码

+(NSString*)getPhoneNoWithLength:(NSInteger)length WithStr:(NSString*)truePhone{
           truePhone = [truePhone stringByReplacingOccurrencesOfString:@"+86" withString:@""];
    //        从字符串中提取数字即手机号的办法:        //invertedSet办法是去反字符,把所有的除了@"0123456789"里的字符都找出来(包括去空格功用)替换成""
                    truePhone = [[truePhone componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]] componentsJoinedByString:@""];
    if(truePhone.length<=length){//11
         return truePhone;
    }else{
        return  [truePhone substringToIndex:length];
    }
}

用法

    // 提取手机号 isgetPhone
    if(self.model.isgetPhone){
        textField.text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        textField.text = [QCT_Common getPhoneNoWithLength:11 WithStr:textField.text];
    }

1.2 在textViewEditChanged时进行提取

  • 监听文本改变
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewEditChanged:) name:UITextFieldTextDidChangeNotification object:_textF];
  • textViewEditChanged

// 监听文本改变
-(void)textViewEditChanged:(NSNotification *)obj{
    UITextField *textField = (UITextField *)obj.object;
    if ([textField.placeholder containsString:@"手机号"] || self.model.type == UserEnterViewType4PhoneNO) {
        //登录界面的【请输入手机号】文本框,对张贴内容进行格局判别:经过前后空格处理之后,只要当内容为11位数以内的数字才可以进行张贴成功。
        textField.text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        textField.text = [QCT_Common getPhoneNoWithLength:11 WithStr:textField.text];
    }
}

1.3 约束只输入11位的数字

  • shouldChangeCharactersInRange
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if ([textField.placeholder containsString:@"手机号"] || self.model.type == UserEnterViewType4PhoneNO) {
        if (range.location > 10) {
            return NO;
        }
        // 处理 string 18621521630 复制的情况
        //(lldb) po range.location
//        <nil>
//        (lldb) po string.length
//        13
        return YES;
    }else{
    /////....
    return YES;
    }
}

正则:11位的数字

#pragma 正则,11位的数字
+ (BOOL)checkEmployeeNumber: (NSString *) number
{
   NSString *pattern = @"^[0-9]{11}";
   NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
   BOOL isMatch = [pred evaluateWithObject:number];
   return isMatch;
}

II、文本输入框的格局规则查验

/**
 文本输入框的格局规则查验: 比如付出暗码、金额格局
     // 约束金额
     //    return [QCT_Common isAmoutshouldChangeCharactersInRange:str];
 // 约束付出暗码
 //    return [QCT_Common isPWDChangeCharactersInRange:str];
 // 短信验证码
 return [QCT_Common isSMSshouldChangeCharactersInRange:str];
// 手机号码: qct_valiMobile
 */
@property (nonatomic, copy) BOOL (^shouldChangeCharactersInRangeblock)(NSString * str);

2.1 金额格局

+ (BOOL)isAmoutshouldChangeCharactersInRange:(NSString*)str{
    //匹配以0最初的数字
    NSPredicate * predicate0 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^[0][0-9]+$"];
    //匹配两位小数、整数
    NSPredicate * predicate1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^(([1-9]{1}[0-9]*|[0])\.?[0-9]{0,2})$"];
    return ![predicate0 evaluateWithObject:str] && [predicate1 evaluateWithObject:str] ? YES : NO;
}

2.2 付出暗码/短信验证码

+ (BOOL)isPWDChangeCharactersInRange:(NSString*)str{
    NSPredicate * predicate0 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^[0-9]{0,6}$"];
    return [predicate0 evaluateWithObject:str] ;
}

2.3 手机号码

文本输入框对手机号码的处理逻辑:

1 \引荐对张贴内容进行提取设置 2、键盘为UIKeyboardTypeNumberPad即可 3、提交数据之前才进行正则的校验(或许只判别是否长度为11)

//UIKeyboardTypeNumberPad
+ (BOOL)isphoneNoshouldChangeCharactersInRange:(NSString *)mobile
{
    if (mobile.length <= 11)
    {
        return YES;
    }else{
        return NO;
    }
}

正则匹配手机号

#pragma 正则匹配手机号
+ (BOOL)checkTelNumber:(NSString *) telNumber
{
    NSString *pattern = @^1+[3578]+\d{9};
    NSPredicate *pred = [NSPredicate predicateWithFormat:@SELF MATCHES %@, pattern];
    BOOL isMatch = [pred evaluateWithObject:telNumber];
    return isMatch;
}
————————————————

版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/z929118967/…

III 商户进件基本信息条件约束

3.1 “•”特别字符处理

把大的圆点替换成英文半角的小圆点

新疆或外国人姓名中心有距离符”“,如迪巴迪力木拉提,代理商经常将”“输错为“•”

if( [_frNameTextF.text containsString:@"•"]) {
//       return [SVProgressHUD showInfoWithStatus:@"法人姓名有误"];
        _frNameTextF.text = [_frNameTextF.text stringByReplacingOccurrencesOfString:@"•" withString:@""];//替换字符
    }

3.2 详细地址约束10-100 个字符

1个汉字算2个字符


    CGFloat adressTextVCount = [ControlManager TextCountWithStr:_adressTextV.text];
    if (adressTextVCount < 5 || adressTextVCount > 50  ) {
        return [SVProgressHUD showInfoWithStatus:@"商户详细地址约束10-100 个字符"];
    }

核算个数


+ (CGFloat)TextCountWithStr:(NSString *)s
{
    //    NSInteger MaxNumberOfDescriptionChars = _model.titleMaxCount;
    int i;CGFloat n=[s length],l=0,a=0,b=0;
    CGFloat wLen=0;
    unichar c;
    for(i=0;i<n;i++){
        c=[s characterAtIndex:i];//按次序取出单个字符
        if(isblank(c)){//判别字符串为空或为空格
            b++;
        }else if(isascii(c)){
            a++;
        }else{
            l++;
        }
        wLen=l+(CGFloat)((CGFloat)(a+b)/2.0);
        //        NSLog(@"wLen--%f",wLen);
        //        if (wLen>=MaxNumberOfDescriptionChars-0.5&&wLen<MaxNumberOfDescriptionChars+0.5) {//设定这个范围是因为,当输入了15英文,即7.5个字符,后边还能输1字母,但不能输1中文
        //            _subLength=l+a+b;//_subLen是要截取字符串的方位
        //        }
    }
    if(a==0 && l==0)
    {
        //        _subLength=0;
        return 0;//只要isblank
    }
    else{
        return wLen;//长度,中文占1,英文等能转ascii的占0.5
    }
}

see also

  • iOS短信验证码的Checklist、格局校验、获取验证码处理流程(约束60s):https://kunnan.blog.csdn.net/article/details/104215486

  • iOS Predicate Format String Syntax 【NSPredicate在正则表达式的使用】

版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/z929118967/…