输入手机号 实现自动三 四 四格式

用的是空格,如果用- 把空格换成- 就OK

#define NUMBERS @"0123456789"

 1 //键盘改变,控制变更
 2 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
 3
 4     NSCharacterSet*cs;
 5     cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS] invertedSet];
 6     NSString*filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
 7     BOOL basicTest = [string isEqualToString:filtered];
 8
 9     NSInteger existedLength = textField.text.length;
10     NSInteger selectedLength = range.length;
11     NSInteger replaceLength = string.length;
12
13     if (existedLength - selectedLength + replaceLength >14) {
14         return NO;
15     }
16
17
18     if(basicTest)
19     {
20         if (textField == phoneTxtField)
21         {
22
23             if ([string isEqualToString:@""]){ // 删除字符
24                 if (((textField.text.length - 2) % 4 == 0) &&((textField.text.length - 2) % 6 != 0)) {
25                     textField.text = [textField.text substringToIndex:textField.text.length - 1];
26                 }else if ((textField.text.length - 2) % 9 == 0){
27                     textField.text = [textField.text substringToIndex:textField.text.length - 1];
28                 }
29                 return YES;
30             } else {
31                 if (textField.text.length<5) {
32                     if (textField.text.length % 4 == 0) {
33                         textField.text = [NSString stringWithFormat:@"%@ ", textField.text];
34                     }
35                 }else{
36                     if (textField.text.length % 9 == 0) {
37                     textField.text = [NSString stringWithFormat:@"%@ ", textField.text];
38                 }
39                 }
40
41             }
42             return YES;
43         }
44     }
45     else
46     {
47         return NO;
48     }
49
50
51     if (string.length == 0) {
52
53         return YES;
54     }
55
56
57     return YES;
58
59
60
61 }
62
63
64 //键盘关闭
65 -(void)textFieldDidEndEditing:(UITextField *)textField
66 {
67     if ((textField == phoneTxtField) &&(textField.text.length==14) ){
68        NSLog(@"输入了九位");
69         NSString *all=[phoneTxtField.text substringFromIndex:1];
70
71         NSString *first=[all substringToIndex:3];
72
73         NSString *pp=[all substringFromIndex:4];
74
75         NSString *center=[pp substringToIndex:4];
76
77         NSString *last=[pp substringFromIndex:5];
78
79         NSLog(@"aaaaaaaaaa=%@%@%@\n",first,center,last);
80
81         userPhone=[NSString stringWithFormat:@"%@%@%@",first,center,last];
82
83     }
84 }
时间: 2024-10-03 06:44:20

输入手机号 实现自动三 四 四格式的相关文章

Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

第三十四课 二维数组的存储 【项目1-3】

第三十四课 二维数组的存储 项目一[二维数组当函数参数] 定义一个函数来完成对参数数组中元素的求和工作,函数声明如下: [cpp] view plain copy print? int sum(int array[ ][4],int m,int n);  //该函数完成对array数组中的前m行和n列元素求和 在以下程序的基础上,完成对sum函数的定义. [cpp] view plain copy print? #include <stdio.h> int sum(int array[ ][4

三十四、Linux系统任务计划cron、chkconfig工具、systemd管理服务、unit介绍

三十四.Linux系统任务计划cron.chkconfig工具.systemd管理服务.unit介绍.target介绍 一.Linux系统任务计划cron crontab命令:对任务计划功能的操作用此命令.选项: -u:指定某个用户,不加-u则为当前用户. -e:制定任务计划. -l:列出任务计划. -r:删除任务计划. 任务计划的配置文件:/etc/crontab 文件内共有五个字段. 从左往右依次为:分.时.日.月.周.用户.命令. 可以不指定用户就是root. # crontab -e  

金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下

金三银四,磨砺锋芒:剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下 引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待!2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上的心,来面对未来每一天的挑战! 所谓"兵马未动,粮草先行",我们打响明天的战役也需要精神食粮来做后勤保障才是.在此我整理了多位从业者和我在2019年底至2020年初的一厂面试精选题,希望对磨砺锋芒.奋发向上

Java进阶(三十四)Integer与int的种种比较你知道多少?

Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

QT开发(三十四)——QT多线程编程

QT开发(三十四)--QT多线程编程 一.QT多线程简介 QT通过三种形式提供了对线程的支持,分别是平台无关的线程类.线程安全的事件投递.跨线程的信号-槽连接. QT中线程类包含如下: QThread 提供了开始一个新线程的方法    QThreadStorage 提供逐线程数据存储    QMutex 提供相互排斥的锁,或互斥量    QMutexLocker 是一个辅助类,自动对 QMutex 加锁与解锁    QReadWriterLock 提供了一个可以同时读操作的锁    QReadL

第三十四天 我为集成平台狂(七)-步履轻盈的JQuery(五)

7月13日,晴."别院深深夏席清,石榴开遍透帘明. 树阴满地日当午,梦觉流莺时一声." 在JQuery的法则里,风格重于一切,IT牛人们从来没有把自己束缚在一张乏味的表单上,怀着对JavaScript的理解,在不断的尝试中寻求着转化的灵感. 大多购票.旅游网站上都提供了一个城市和日期输入查询的功能.用户在输入框中只需输入城市的拼音或者简称就可以弹出相关城市的名称,选择日期时则是出现一个月的日历控件,只需点选日期即可,整个操作一目了然. 本文讲解如何使用jQuery实现城市查询和日历显示