unity inputfield 过滤emoji输入
unity版本:unity2017.1.5f1
复现步骤:InputField在安卓手机InputField连续输入两个emoji会报错
报错内容:
2020-01-08 19:56:38.366 22894-22931/? E/Unity: ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index
at System.Collections.Generic.List`1[UnityEngine.UICharInfo].get_Item (Int32 index) [0x00000] in <filename unknown>:0
at UnityEngine.UI.InputField.SetDrawRangeToContainCaretPosition (Int32 caretPos) [0x00000] in <filename unknown>:0
at UnityEngine.UI.InputField.UpdateLabel () [0x00000] in <filename unknown>:0
at UnityEngine.UI.InputField.SendOnValueChangedAndUpdateLabel () [0x00000] in <filename unknown>:0
at UnityEngine.UI.InputField.LateUpdate () [0x00000] in <filename unknown>:0 (Filename: Line: -1)
看报错 可看出是一个长度越界的错,结合代码内容和bug复现,发现报错总是发生在输入两个emoji时,也就是在输入时获取字符长度报错。
查阅资料,发现在ios上不会出现这样的问题
iOS: Added a compile flag in the trampoline code in order to allow the user to disable the filtering of emoji characters.
因此只需要处理安卓的即可
参考了几位大佬的总结:
Unity之输入框屏蔽Emoji表情
各种字符的unicode区间
结合官方给的
Emoji Unicode Tables
字符类
总结一下,就是过滤掉emoji的输入
方法:通过监听InputField的输入,获取当前输入字符串内容,通过正则匹配,发现有emoji,直接替换为空字符串
达到过滤emoji输入的功能。
核心代码如下:
List<string> patten = new List<string>() { @"\p{Cs}", @"\p{Co}", @"\p{Cn}", @"[\u2702-\u27B0]" };
private string FilterEmoji(string str)
{
for (int i = 0; i < patten.Count; i++)
{
str = Regex.Replace(str, patten[i], "");//屏蔽emoji
}
return str;
}
这里屏蔽了绝大多数emoji 可根据自己需求放宽匹配规则。
unity inputfield 过滤emoji输入的更多相关文章
- UITextView/UITextField检测并过滤Emoji表情符号
UITextView/UITextField检测并过滤Emoji表情符号 本人在开发过程中遇到过这种情况,服务器端不支持Emoji表情,因此要求客户端在上传用户输入时,不能包含Emoji表情.在客户端 ...
- js过滤emoji表情符号
手机端常常会遇到用户输入框,输入emoji,如果是数据库是UTF8,会遇到报错:SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for ...
- Js 过滤emoji表情...持续补充中..
原文来自: https://www.cnblogs.com/tsjTSJ/p/7065544.html 最全最详细的用JS过滤Emoji表情的输入 在前端页面开发过程中,总会碰到不允许输入框输入e ...
- java代码过滤emoji表情
可以新建一个过滤器的类,在类中书写如下代码: public static String filterEmoji(String source) { if(source != null ...
- java过滤emoji表情(成功率高)
转载自:http://blog.csdn.net/huangchao064/article/details/53283738 基本能过滤大部分的ios,安卓,微信emoji表情 有很多别的帖子搜出来很 ...
- 过滤特殊字符(包括过滤emoji表情)
/** * 过滤特殊字符 * @param $text * @return mixed */ public static function filterSpecialChars($text) { // ...
- python3 清除过滤emoji表情
python3 清除过滤emoji表情 方法一: emoji处理库,emoji官网:https://pypi.org/project/emoji/ #安装 pip install emoji 官方例子 ...
- Unity Android设备的输入
Unity Android设备的输入 1依据屏幕位置输入 有的时候也许是为了整个有些风格的干净,减少屏幕上的UI图标,以至于摒弃了虚拟按键这种常用的输入方式.为了替代虚拟按键的输入方式而选择了依据点击 ...
- android实现emoji输入
学android也有一段时间, 一直都是自己摸索, 各种上网查资料, 也明白了不能一味去索取有时间也要分享一些自己的心得 . 最近几天都在写关于android emoji输入的小例子,网上有不少源码还 ...
随机推荐
- elasticsearch jvm优化
测试环境elasticsearch jvm 4G jdk1.8 [serveradm@test-log-server elasticsearch]$ java -version java versio ...
- Mysql - 使用入门
本文是学习 Mysql必知必会 后的笔记 学习之前需要创建一个数据库,然后导入下面两个mysql脚本 create database db1 charset utf8; ############### ...
- xPath,beautifulsoup和pyquery
一.XPath from lxml import etree html = etree.parse('html源代码',etree.HTMLPaser()) 1.节点的获取 a.html.xpath( ...
- Standalone模式下,通过Systemd管理Flink1.11.1的启停及异常退出
Flink以Standalone模式运行时,可能会发生jobmanager(以下简称jm)或taskmanager(以下简称tm)异常退出的情况,我们可以使用Linux自带的Systemd方式管理jm ...
- 【Springboot】Springboot监听器Demo
/** * @author: yq * @date: 2020/8/31 0:01 * @description 自定义事件 */ @Data public class MyEvent extends ...
- poj3648 2-sat
题意: 一对夫妻结婚,请来了n对夫妻,所有人坐在同一张桌子上吃饭,这张桌子是长方形的可以坐两排人,有如下限制 (1) 新娘和新郎不做同一侧. (2) 每对来的夫妻也不能坐在同一侧. (3 ...
- hdu4720 三角形的外接圆
题意: 给你四个点,问你第四个点是否在前三个点围成的三角形的外接圆上. 思路: 水题,就是练练用魔板罢了,当该三角形是锐角三角形的时候,圆心是任意两条边中垂线的交点,半径是圆心 ...
- Host头部攻击
在HTTP的请求报文中,我们经常会看到Host字段,如下 GET /test/ HTTP/1.1 Host: www.baidu.com Connection: keep-alive Upgrade- ...
- RHCE7 认证之学习笔记
-------------------------------------------------------------------------------------------初始化:两台服务器 ...
- Windowsw核心编程 第13章 Windows内存结构
第1 3章 Wi n d o w s的内存结构 13.1 进程的虚拟地址空间 每个进程都被赋予它自己的虚拟地址空间.对于 3 2位进程来说,这个地址空间是4 G B,因为3 2位指针可以拥有从0 x ...