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

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

前言

使用手机进行登录注册的时候,需要对粘贴的内容进行手机号码提前

  • 应用场景: 登陆界面、注册界面

image.png

I、实现细节

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

  1. 推荐对粘贴内容进行提取设置
  2. 键盘为UIKeyboardTypeNumberPad即可
  3. 提交数据之前才进行正则的校验(或者只判断是否长度为11)‘

1.1. 提取手机号码

从字符串中提取数字即手机号

invertedSet方法是去反字符,把所有的除了@"0123456789"里的字符都找出来(包含去空格功能)替换成""

+(NSString*)getPhoneNoWithLength:(NSInteger)length WithStr:(NSString*)truePhone{
           truePhone = [truePhone stringByReplacingOccurrencesOfString:@"+86" withString:@""];
//从原文查看完成代码
    if(truePhone.length<=length){//11
         return truePhone;
    }else{
        return  [truePhone substringToIndex:length];
    }
}
  • 原文

https://kunnan.blog.csdn.net/article/details/112602579

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;
    }
}

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;
}
————————————————

NSPredicate在正则表达式的应用:https://blog.csdn.net/z929118967/article/details/115505524

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

目录
相关文章
|
4月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
4月前
|
Web App开发 Go iOS开发
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)|社区征文
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)|社区征文
|
2月前
|
测试技术 Android开发 iOS开发
IOS手机自动化一些工具的简单有哪些?
IOS手机自动化一些工具的简单有哪些?
|
4月前
|
JSON 前端开发 数据安全/隐私保护
【教程】iOS 手机抓包工具介绍及教程
📱 最近又发现APP Store一款宝藏软件,克魔助手抓包工具,app刚上架,功能不断迭代中,目前18软妹币实惠价可享受终身版!现在是下手的最好时机。
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
本文介绍了如何批量快速查询手机号码归属地并进行分类。首先,通过提供的百度网盘或腾讯云盘链接下载免费查询软件。其次,开启软件,启用复制粘贴功能,直接粘贴号码列表并选择高速查询。软件能在极短时间内(如1.76秒内)完成40多万个号码的查询,结果包括归属地、运营商、邮箱和区号,且数据准确。之后,可直接导出数据至表格,若数据超过100万,可按省份、城市及运营商分类导出。文章还附带了操作动画演示,展示全程流畅的处理大量手机号码归属地查询的过程。
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
|
4月前
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。
|
4月前
|
安全 开发者 iOS开发
iOS16系统手机设置开启开发者模式才能安装ipa包
iOS16系统手机设置开启开发者模式才能安装ipa包
146 1
|
4月前
|
Web App开发 Go iOS开发
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
|
4月前
|
安全 Android开发 iOS开发
探索安卓与iOS手机操作系统的发展趋势与差异
在移动互联网时代,安卓和iOS手机操作系统一直处于激烈的竞争之中。本文将从技术角度出发,探讨两大操作系统的发展趋势、特点以及差异,并分析其对用户体验和开发者生态的影响,旨在为读者提供对移动操作系统发展方向的深入了解。