您的位置:首页 > 产品设计 > UI/UE

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;
}
下面是运行效果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: