iOStextfield 限制输入字符长度和过滤表情符号
来源:互联网 发布:java分布式应用有哪些 编辑:程序博客网 时间:2024/06/10 09:36
//增加修改框
-(void)creatSaveView{
UILabel * lab = [[UILabelalloc]init];
if (self.searchType ==1) {
lab.frame =CGRectMake(14,8 * KWIDTH +64, IPHONE_WIDTH -100, 16 *KWIDTH);
}else{
lab.frame =CGRectMake(14,8 * KWIDTH,IPHONE_WIDTH - 100,16 * KWIDTH);
}
lab.text =@"备注名";
lab.font = [UIFontsystemFontOfSize:14];
lab.textColor =kColor(137,137, 137);
[self.viewaddSubview:lab];
UIView *view=[[UIViewalloc] init];
if (self.searchType ==1) {
view.frame =CGRectMake(0,32*KWIDTH +64, IPHONE_WIDTH,40*KWIDTH);
}else{
view.frame =CGRectMake(0,32*KWIDTH,IPHONE_WIDTH, 40*KWIDTH);
}
UIView *lineViewlight3=[[UIViewalloc] initWithFrame:CGRectMake(0,0,IPHONE_WIDTH, 0.5)];
lineViewlight3.backgroundColor=kColor(200,200 , 200);
lineViewlight3.alpha=0.8;
[view addSubview:lineViewlight3];
UIView *lineViewlight4=[[UIViewalloc] initWithFrame:CGRectMake(0,40*KWIDTH-0.5,IPHONE_WIDTH, 0.5)];
lineViewlight4.backgroundColor=kColor(200,200 , 200);
lineViewlight4.alpha=0.7;
[view addSubview:lineViewlight4];
view.backgroundColor=[UIColorwhiteColor];
_nameField = [[UITextFieldalloc]initWithFrame:CGRectMake(10*KWIDTH,0, IPHONE_WIDTH-15*KWIDTH,40*KWIDTH)];
_nameField.text =self.NameField;
_nameField.borderStyle =UITextBorderStyleNone;
_nameField.clearButtonMode=UITextFieldViewModeAlways;
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textFiledEditChanged:)
name:@"UITextFieldTextDidChangeNotification"
object:_nameField];
[view addSubview:_nameField];
[self.viewaddSubview:view];
}
-(void)textFiledEditChanged:(NSNotification*)obj{
UITextField *textField = (UITextField *)obj.object;
//过滤掉系统表情
// UITextView * textView;
//
// NSRange textRange = [textView selectedRange];
// [textView setText:[self disable_emoji:[textView text]]];
// [textView setSelectedRange:textRange];
NSString *toBeString = textField.text;
DSLog(@"-----toBeString 1 ----%@",toBeString);
BOOL isEmoj = [selfstringContainsEmoji:toBeString];
NSString * _showStr;
toBeString = [selfdisable_emoji:toBeString];
// textField.text = toBeString;
DSLog(@"-----toBeString 2 -----%@",toBeString);
NSString *lang = [[UITextInputModecurrentInputMode] primaryLanguage]; //键盘输入模式
if([langisEqualToString:@"zh-Hans"]) {//简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textFieldmarkedTextRange];
//获取高亮部分
UITextPosition *position = [textFieldpositionFromPosition:selectedRange.startoffset:0];
//没有高亮选择的字,则对已输入的文字进行字数统计和限制
if(!position) {
if(toBeString.length >kHZMaxLength) {
textField.text = [toBeStringsubstringToIndex:kHZMaxLength];
_showStr = [toBeString substringToIndex:kHZMaxLength];
}
}
//有高亮选择的字符串,则暂不对文字进行统计和限制
else{
}
}
//中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
if(toBeString.length >kEGMaxLength) {
textField.text= [toBeStringsubstringToIndex:kEGMaxLength];
_showStr = [toBeString substringToIndex:kEGMaxLength];
}
}
DSLog(@" _showStr %@",_showStr);
if (isEmoj) {
if ([_showStrlength]) {
textField.text = _showStr;
}else{
textField.text = toBeString;
}
}
}
//判断NSString字符串是否包含emoji表情
- (BOOL)stringContainsEmoji:(NSString *)string
{
__blockBOOL returnValue =NO;
[string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequencesusingBlock:^(NSString *substring,NSRange substringRange,NSRange enclosingRange,BOOL *stop) {
constunichar hs = [substring characterAtIndex:0];
// surrogate pair
if (0xd800) {
if (0xd800 <= hs && hs <=0xdbff) {
if (substring.length >1) {
constunichar ls = [substring characterAtIndex:1];
constint uc = ((hs - 0xd800) *0x400) + (ls - 0xdc00) +0x10000;
if (0x1d000 <= uc && uc <=0x1f77f) {
returnValue =YES;
}
}
}elseif (substring.length >1) {
constunichar ls = [substring characterAtIndex:1];
if (ls ==0x20e3) {
returnValue =YES;
}
}else {
// non surrogate
if (0x2100 <= hs && hs <=0x27ff) {
returnValue =YES;
}elseif (0x2B05 <= hs && hs <=0x2b07) {
returnValue =YES;
}elseif (0x2934 <= hs && hs <=0x2935) {
returnValue =YES;
}elseif (0x3297 <= hs && hs <=0x3299) {
returnValue =YES;
}elseif (hs == 0xa9 || hs ==0xae || hs == 0x303d || hs ==0x3030 || hs == 0x2b55 || hs ==0x2b1c || hs == 0x2b1b || hs ==0x2b50) {
returnValue =YES;
}
}
}
}];
return returnValue;
}
#pragma Mark --- 过滤表情
- (NSString *)disable_emoji:(NSString *)text
{
NSRegularExpression *regex = [NSRegularExpressionregularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]"options:NSRegularExpressionCaseInsensitiveerror:nil];
NSString *modifiedString = [regexstringByReplacingMatchesInString:text
options:0
range:NSMakeRange(0, [textlength])
withTemplate:@""];
return modifiedString;
}
- iOStextfield 限制输入字符长度和过滤表情符号
- iOStextfield 限制输入字符长度和过滤表情符号
- Android EditText 特殊字符过滤和字符输入长度限制
- iOStextField限制输入框长度,包括判断汉字总
- 对输入进行长度限制和字符过滤,防止SQL注入
- js 过滤非法字符,只输入数字,文本框长度限制
- 限制输入字符的长度和内容
- EditText限制输入字符长度和回车
- edittext 特殊字符过滤和字符长度限制
- VC中CEdit过滤输入字符与限制输入字符长度
- wpf 输入字符长度限制
- 限制textfiled输入字符长度
- Android EditText输入限制最大字符长度 和 限制只能输入数字和字母(包含大小写)
- 限制EditText 输入Emjoy 表情符号
- 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方法
- 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方法
- 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方法
- 关于android 中EditText 特殊字符过滤和字符长度限制的最优方法
- iOS线程其一NSThread
- 国内镜像网站分享
- Google地图开发中级篇
- super关键字的用法
- Android Binder 分析——匿名共享内存(Ashmem)
- iOStextfield 限制输入字符长度和过滤表情符号
- Java泛型-类型擦除
- 《head first c》学习笔记及C语言有用的函数
- ANSIC标准定义的C语言预处理指令总结
- vector 循环输入数据
- 继续适配
- 第十六篇【自动化的实际应用情况】
- 浅谈对主成分分析(PCA)算法的理解 + QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置
- VC++源码分析 - 中国象棋源码分析