使用UITextField限制只可输入中,英文,数字的方法_IOS

前言

本文主要介绍使用UITextField限制只可输入中,英文,数字,我们可以使用NSPredicate正则表达式可以过滤,下面看看详细的步骤方法

首先设置UItextField的代理

实现如下方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

 if ([self isInputRuleAndNumber:string] || [string isEqualToString:@""]) {
  return YES;
 }
 return NO;
}

然后添加事件,因为选择输入法联想的词.是不会经过textField:shouldChangeCharactersInRange:replacementString:方法的

 [textField addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged];

实现:

- (void)textFieldChanged:(UITextField *)textField {

 NSString *toBeString = textField.text;
 NSString *lastString;
 if(toBeString.length>0)
  lastString=[toBeString substringFromIndex:toBeString.length-1];

 if (![self isInputRuleAndNumber:toBeString]&&[self hasEmoji:lastString]) {
  textField.text = [self disable_emoji:toBeString];
  return;
 }
 NSString *lang = [[textField textInputMode] primaryLanguage];
 if([lang isEqualToString:@"zh-Hans"]) {
  UITextRange *selectedRange = [textField markedTextRange];
  UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
  if(!position) {
   NSString *getStr = [self getSubString:toBeString];
   if(getStr && getStr.length > 0) {
    textField.text = getStr;
   }
  }
 } else{
  NSString *getStr = [self getSubString:toBeString];
  if(getStr && getStr.length > 0) {
   textField.text= getStr;
  }
 }
}

再来实现限制:

pattern中,输入需要验证的通过的字符

     小写a-z

     大写A-Z

     汉字\u4E00-\u9FA5

     数字\u0030-\u0039

- (BOOL)isInputRuleAndNumber:(NSString *)str {
 NSString *pattern = @"[a-zA-Z\u4E00-\u9FA5\\u0030-\\u0039]";
 NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
 BOOL isMatch = [pred evaluateWithObject:str];
 return isMatch;
}

实现判断是否是Emoji

- (BOOL)hasEmoji:(NSString*)str{
 NSString *pattern = @"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]";
 NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
 BOOL isMatch = [pred evaluateWithObject:str];
 return isMatch;
}

字符限制

#define kMaxLength 20;
-(NSString *)getSubString:(NSString*)string
{
 NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
 NSData* data = [string dataUsingEncoding:encoding];
 NSInteger length = [data length];
 if (length > kMaxLength) {
  NSData *data1 = [data subdataWithRange:NSMakeRange(0, kMaxLength)];
  NSString *content = [[NSString alloc] initWithData:data1 encoding:encoding];
  if (!content || content.length == 0) {
   data1 = [data subdataWithRange:NSMakeRange(0, kMaxLength - 1)];
   content = [[NSString alloc] initWithData:data1 encoding:encoding];
  }
  return content;
 }
 return nil;
}

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索uitextfield
, 限制
, uitextfield输入限制
uitextfield输入数字
uitextfield 限制输入、uitextfield 限制数字、ios 限制只能输入数字、ios 限制输入数字大小、ios 限制输入数字长度,以便于您获取更多的相关知识。

时间: 2024-09-27 00:38:58

使用UITextField限制只可输入中,英文,数字的方法_IOS的相关文章

在Word中快速输入大写中文数字的方法

  在一些特殊领域,例如银行等金融部门,经常需要输入中文的数字,一次两次可以,但是输入次数多了未免太麻烦了,这里介绍一种快速输入中文数字的方法: 执行"插入"菜单上的"数字"命令,在弹出的"数字"对话框中输入需要的数字,如输入1231291,然后在"数字类型"里面选择中文数字版式"壹.贰.叁-.. ",单击"确定",中文数字式的"壹佰贰拾叁万壹仟贰佰玖拾壹"就输入好了

详解iOS App开发中Cookie的管理方法_IOS

一.何为Cookie Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息.Cookie中的字段与意义由服务端进行定义.例如,当用户在某个网站进行了登录操作后,服务端会将Cookie信息返回给终端,终端会将这些信息进行保存,在下一次再次访问这个网站时,终端会将保存的Cookie信息一并发送到服务端,服务端根据Cookie信息是否有效来判断此用户是否可以自动登录. 二.iOS中进行Cookie管理的两个类 iOS中进行HTTP网络请求Cookie管理主要由两个类负责,一个类是NSHTT

全面解析iOS应用中自定义UITableViewCell的方法_IOS

有时候我们需要自己定义UITableViewCell的风格,其实就是向行中添加子视图.添加子视图的方法主要有两种:使用代码以及从.xib文件加载.当然后一种方法比较直观. 一.基本用法我们这次要自定义一个Cell,使得它像QQ好友列表的一行一样:左边是一张图片,图片的右边是三行标签: 当然,我们不会搞得这么复杂,只是有点意思就行. 1.运行Xcode 4.2,新建一个Single View Application,名称为Custom Cell: 2.将图片资源导入到工程.为此,我找了14张50×

C#验证输入的是否数字的方法

其实用正则表达式也可以 static bool IsNumeric(string str) { if (str==null || str.Length==0) return false; foreach(char c in str) { if (!Char.IsNumber(c)) { return false; } } return true; } 正则表达的写法是: static bool IsNumeric(string str) { System.Text.RegularExpressi

js 截取或者替换字符串中的数字实现方法_javascript技巧

在js操作表格时,我们经常会需要得到或者修改name中的下标,如:name="cust[1]/custName"; 替换:name.replace(/[\d]+/,num); //num为你需要替换成的数字变量 获取:name.match(/[\d]+/). 获取多个:name.match(/[\d]+/g).

android-Edittext 验证只允许输入数字和字符?

问题描述 Edittext 验证只允许输入数字和字符? 在程序中 edittext 验证,应该只允许输入字符.数字.下划线和连字符. edittext.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Overr

C#验证输入的是否数字的几种方法

方法一:             static bool IsNumeric(string str)   {    if (str==null || str.Length==0)     return false;    foreach(char c in str)    {     if (!Char.IsNumber(c))     {      return false;     }    }    return true;   }     方法二: private bool IsNume

C#中日期型数据输入只想输入年月,日期空着,如何实现

问题描述 C#中日期型数据输入只想输入年月,日期空着,如何实现 解决方案 解决方案二:前台的话,可以用控件处理,或script.后台的话,.ToString("yyyy/MM");解决方案三:如果是用DATATIMEPICKER控件的话,可以通过设置CUSTOMFORMAT来实现.解决方案四:是这样的,我想输入时输入年和月,日不用输,存的时侯存年月日,日默认为01,控制输入格式为日期型数据,如何实现.解决方案五:ToString("yyyy/MM");解决方案六:m

怎样在Excel中只显示大于10的数字?

  今天我们来学习一下Excel中一个小技巧,在Excel设置只显示大雨10的数字,你知道如何操作码?如果不懂就一起来学习一下操作技巧吧. 怎样在Excel中只显示大于10的数字? 如下图所示,B列是数字,字母混杂的内容.要求只显示大于10的数字,其他的都隐藏起来. 操作步骤: 选取区域 - ctrl+数字1打开单元格设置窗口 - 数字 - 自定义 - 在右边文本框中输入自定义代码 :[>10]G/通用格式; 注意:红色的要全部输入,包括最后的英文状态引号(;) 设置完成的效果如下图所示. 这样