iOS手机号正则表达式并实现344格式 (正则的另一种实现方式)
2016-09-07 09:02
573 查看
[Demo下载地址]https://git.oschina.net/remainedmute/PhoneNumDemo.git
相关博客http://www.jianshu.com/p/00da4d87b777
文/laoNa(简书作者)
原文链接:http://www.jianshu.com/p/f9975ab88637
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关博客http://www.jianshu.com/p/00da4d87b777
1.在UITextField的代理方法中实现手机号只能输入数字并满足我们的要求(首位只能是1,第二位只能是3,4,5,7,8其它不限制)
#pragma mark UITextFieldDelegate - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ previousTextFieldContent = textField.text; previousSelection = textField.selectedTextRange; if (range.location == 0){ NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"1"] invertedSet]; NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; BOOL basicTest = [string isEqualToString:filtered]; if (!basicTest){ //[self showMyMessage:@"只能输入数字"]; return NO; } } else if (range.location == 1){ NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"^[3,4,5,7,8]$"] invertedSet]; NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; BOOL basicTest = [string isEqualToString:filtered]; if (!basicTest){ //[self showMyMessage:@"只能输入数字"]; return NO; } } if (range.location > 12){ return NO; } return YES; }
2.为了随时获取textfield里面的内容,给UITextField绑定
UIControlEventEditingChanged事件[self.phoneTextField addTarget:self action:@selector(formatPhoneNumber:) forControlEvents:UIControlEventEditingChanged];
3.实现formatPhoneNumber:方法以来让手机号实现344格式
- (void)formatPhoneNumber:(UITextField*)textField{ NSUInteger targetCursorPosition = [textField offsetFromPosition:textField.beginningOfDocument toPosition:textField.selectedTextRange.start]; NSLog(@"targetCursorPosition:%li", (long)targetCursorPosition); NSString* nStr = [textField.text stringByReplacingOccurrencesOfString:@" " withString:@""]; NSString* preTxt = [previousTextFieldContent stringByReplacingOccurrencesOfString:@" " withString:@""]; char editFlag = 0;// 正在执行删除操作时为0,否则为1 if (nStr.length <= preTxt.length) { editFlag = 0; }else{ editFlag = 1; } if (nStr.length > 11) { textField.text = previousTextFieldContent; textField.selectedTextRange = previousSelection; return; } NSString* spaceStr = @" "; NSMutableString *mStrTemp = [NSMutableString string]; int spaceCount = 0; if (nStr.length < 3 && nStr.length > -1) { spaceCount = 0; }else if (nStr.length < 7&& nStr.length > 2){ spaceCount = 1; }else if (nStr.length < 12&& nStr.length > 6){ spaceCount = 2; } for (int i = 0; i < spaceCount; i++){ if (i == 0) { [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(0, 3)],spaceStr]; }else if (i == 1){ [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(3, 4)], spaceStr]; }else if (i == 2){ [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(7, 4)], spaceStr]; } } if (nStr.length == 11){ [mStrTemp appendFormat:@"%@%@", [nStr substringWithRange:NSMakeRange(7, 4)], spaceStr]; } if (nStr.length < 4 && nStr.length > 0){ [mStrTemp appendString:[nStr substringWithRange:NSMakeRange(nStr.length-nStr.length % 3,nStr.length % 3)]]; }else if(nStr.length > 3){ NSString *str = [nStr substringFromIndex:3]; [mStrTemp appendString:[str substringWithRange:NSMakeRange(str.length-str.length % 4,str.length % 4)]]; if (nStr.length == 11){ [mStrTemp deleteCharactersInRange:NSMakeRange(13, 1)]; } } NSLog(@"=======mstrTemp=%@",mStrTemp); textField.text = mStrTemp; // textField设置selectedTextRange NSUInteger curTargetCursorPosition = targetCursorPosition;// 当前光标的偏移位置 if (editFlag == 0){ //删除 if (targetCursorPosition == 9 || targetCursorPosition == 4){ curTargetCursorPosition = targetCursorPosition - 1; } } else { //添加 if (nStr.length == 8 || nStr.length == 3){ curTargetCursorPosition = targetCursorPosition + 1; } } UITextPosition *targetPosition = [textField positionFromPosition:[textField beginningOfDocument] offset:curTargetCursorPosition]; [textField setSelectedTextRange:[textField textRangeFromPosition:targetPosition toPosition :targetPosition]]; }
文/laoNa(简书作者)
原文链接:http://www.jianshu.com/p/f9975ab88637
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- IOS开发——正则表达式验证手机号、密码
- iOS如何随意的穿插跳跃,push来pop去
- iOS-绘图(Quartz2D)的简单使用(原创)
- Quartz 2D在ios中的使用简述一:坐标体系
- 【iOS开发】Quartz2D的简单使用
- iOS9之后动态控制状态栏隐藏和显示
- IOS开发通信录
- IOS开发内存分析总结
- iOS二维码总结
- IOS——多线程(二)
- iOS 二维码的生成并使用
- iOS精确计算label 的高度
- iOS 图形绘制<一> 利用Quartz2D绘制直线
- IOS——地图与定位
- iOS7之后经过滑动返回导航栏隐藏和显示带来的坑
- IOS-地图与定位
- iOS 封装AFNetWorking
- iOS 对付内存泄漏,来说说我的调试方法
- iOS调用系统相册、相机 显示中文标题
- iOS相机操作笔记