iOS——判断UITextField/UITextView输入的字符中是否含有系统表情
2015-03-07 10:44
615 查看
在做iOS客户端开发的过程中,有可能有这样的需求:对一条内容进行评论(可是输入的评论内容中可能含有系统表情),将评论内容提交给服务器。当输入的评论内容中含有系统表情的时候不能向服务器提交这条评论,或者评论后app直接给崩掉了,这是让人不可容忍的,因此要排查输入的内容是否含有系统表情,以便给使用者给出提示。下面给出输入的字符中是否含有系统表情的写法。
//"判定"控件的touchUpInside方法
- (IBAction)judgeClickAction:(id)sender {
NSString *string = self.textView.text;
NSInteger strLength = string.length;
if (strLength)
{
for (NSInteger i =
0; i < strLength; i ++)
{
if (i < strLength -
1)
{
NSString *tempStr = [string
substringWithRange:NSMakeRange(i,
2)];
if ([self
stringContainsEmoji:tempStr])
{
self.resultLabel.text =
@"结果:输入的字符中含有系统表情";
break;
}
else
{
self.resultLabel.text =
@"结果:输入的字符中不含系统表情";
}
}
}
}
}
//判断是否是系统表情
-(BOOL)stringContainsEmoji:(NSString *)string
{
__block BOOL returnValue =
NO;
[string enumerateSubstringsInRange:NSMakeRange(0, [string
length]) options:NSStringEnumerationByComposedCharacterSequences
usingBlock:
^(NSString *substring,
NSRange substringRange, NSRange enclosingRange,
BOOL *stop)
{
const unichar hs = [substring
characterAtIndex:0];
// surrogate pair
if (0xd800 <= hs && hs <=
0xdbff)
{
if (substring.length >
1)
{
const unichar ls = [substring
characterAtIndex:1];
const int uc = ((hs -
0xd800) * 0x400) + (ls -
0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <=
0x1f77f)
{
returnValue = YES;
}
}
}
else if (substring.length >
1)
{
const unichar ls = [substring
characterAtIndex:1];
if (ls == 0x20e3)
{
returnValue = YES;
}
}
else
{
// non surrogate
if (0x2100 <= hs && hs <=
0x27ff)
{
returnValue = YES;
}
else if (0x2B05 <= hs && hs <=
0x2b07)
{
returnValue = YES;
}
else if (0x2934 <= hs && hs <=
0x2935)
{
returnValue = YES;
}
else if (0x3297 <= hs && hs <=
0x3299)
{
returnValue = YES;
}
else if (hs ==
0xa9 || hs == 0xae || hs ==
0x303d || hs == 0x3030 || hs == 0x2b55 || hs ==
0x2b1c || hs == 0x2b1b || hs ==
0x2b50)
{
returnValue = YES;
}
}
}];
return returnValue;
}
下面是运行效果:
//"判定"控件的touchUpInside方法
- (IBAction)judgeClickAction:(id)sender {
NSString *string = self.textView.text;
NSInteger strLength = string.length;
if (strLength)
{
for (NSInteger i =
0; i < strLength; i ++)
{
if (i < strLength -
1)
{
NSString *tempStr = [string
substringWithRange:NSMakeRange(i,
2)];
if ([self
stringContainsEmoji:tempStr])
{
self.resultLabel.text =
@"结果:输入的字符中含有系统表情";
break;
}
else
{
self.resultLabel.text =
@"结果:输入的字符中不含系统表情";
}
}
}
}
}
//判断是否是系统表情
-(BOOL)stringContainsEmoji:(NSString *)string
{
__block BOOL returnValue =
NO;
[string enumerateSubstringsInRange:NSMakeRange(0, [string
length]) options:NSStringEnumerationByComposedCharacterSequences
usingBlock:
^(NSString *substring,
NSRange substringRange, NSRange enclosingRange,
BOOL *stop)
{
const unichar hs = [substring
characterAtIndex:0];
// surrogate pair
if (0xd800 <= hs && hs <=
0xdbff)
{
if (substring.length >
1)
{
const unichar ls = [substring
characterAtIndex:1];
const int uc = ((hs -
0xd800) * 0x400) + (ls -
0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <=
0x1f77f)
{
returnValue = YES;
}
}
}
else if (substring.length >
1)
{
const unichar ls = [substring
characterAtIndex:1];
if (ls == 0x20e3)
{
returnValue = YES;
}
}
else
{
// non surrogate
if (0x2100 <= hs && hs <=
0x27ff)
{
returnValue = YES;
}
else if (0x2B05 <= hs && hs <=
0x2b07)
{
returnValue = YES;
}
else if (0x2934 <= hs && hs <=
0x2935)
{
returnValue = YES;
}
else if (0x3297 <= hs && hs <=
0x3299)
{
returnValue = YES;
}
else if (hs ==
0xa9 || hs == 0xae || hs ==
0x303d || hs == 0x3030 || hs == 0x2b55 || hs ==
0x2b1c || hs == 0x2b1b || hs ==
0x2b50)
{
returnValue = YES;
}
}
}];
return returnValue;
}
下面是运行效果:
相关文章推荐
- 判断输入的字符串是否含有特殊字符和表情
- iOS-判断输入的字符是否含有中文
- JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
- JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
- IOS开发 判断是否是非法字符 例如表情符号
- iOS:UITextView、UITextField检测用户是否完成输入的选择
- C#判断输入的字符串中是否含有大写字母,小写字母,数字,字符
- iOS巅峰之判断输入的字符串中是否包含表情图片
- ios开发笔记-判断输入的是否是表情
- C#判断输入的字符串中是否含有大写字母,小写字母,数字,字符
- [iOS]UITextField和UITextView限制输入字符数量方面
- 判断字符串中是否含有表情iOS
- iOS判断是否含有非法字符代码
- UITextView行数限制:输入字符后,判断是否会超过限制行数
- iOS判断输入的字符是否都是中文
- iOS 判断字符串是否含有表情
- C#判断输入的字符串中是否含有大写字母,小写字母,数字,字符
- iOS判断输入的字符是否都是中文
- C#判断输入的字符串中是否含有大写字母,小写字母,数字,字符
- (iOS开发)判断字符串中是否含有非ASCII码字符