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

目录
相关文章
|
6月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
23天前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
42 3
|
26天前
|
Android开发 iOS开发 UED
安卓与iOS的较量:谁才是智能手机市场的王者?
本文将深入探讨安卓和iOS两大智能手机操作系统之间的竞争关系,分析它们各自的优势和劣势。通过对比两者在市场份额、用户体验、应用生态等方面的表现,我们将揭示出谁才是真正的市场领导者。无论你是安卓粉丝还是iOS忠实用户,这篇文章都将为你提供一些有趣的观点和见解。
|
6月前
|
Web App开发 Go iOS开发
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)|社区征文
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)|社区征文
|
6月前
|
JSON 前端开发 数据安全/隐私保护
【教程】iOS 手机抓包工具介绍及教程
📱 最近又发现APP Store一款宝藏软件,克魔助手抓包工具,app刚上架,功能不断迭代中,目前18软妹币实惠价可享受终身版!现在是下手的最好时机。
|
4月前
|
测试技术 Android开发 iOS开发
IOS手机自动化一些工具的简单有哪些?
IOS手机自动化一些工具的简单有哪些?
|
6月前
|
Web App开发 Go iOS开发
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
|
6月前
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
本文介绍了如何批量快速查询手机号码归属地并进行分类。首先,通过提供的百度网盘或腾讯云盘链接下载免费查询软件。其次,开启软件,启用复制粘贴功能,直接粘贴号码列表并选择高速查询。软件能在极短时间内(如1.76秒内)完成40多万个号码的查询,结果包括归属地、运营商、邮箱和区号,且数据准确。之后,可直接导出数据至表格,若数据超过100万,可按省份、城市及运营商分类导出。文章还附带了操作动画演示,展示全程流畅的处理大量手机号码归属地查询的过程。
320 0
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
|
6月前
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。
461 2