有些奇葩公司sb后台,数据库创建时,并没有兼容输入法的表情,却特么把锅推给前端,让前端不让输入表情,我只想送他三个字MMP!!!SB自有天来收!!!
好吧。。。不吐槽了,其实要是我做后台的话,解决这个问题很简单,只需要将数据库的编码改为utf8mb4就行了。那么现在我只是安卓开发者,我又要怎么处理呢?
可以给EditText设置过滤器,但是,表情过滤并不是完全过滤。这个方法,只能拒绝大多数表情符,并不能拒绝所有的表情符。本人也没有找到一个好的前端的方法,看了好多网上的方法,都是没有过滤干净的。还望大神们见到不吝赐教。
/** 只允许 英文,汉字,和数字 ,这个过滤器已经很接近了,可以不能输入标点。。fk **/
InputFilter inputFilter = new InputFilter() {
Pattern pattern = Pattern.compile("[^a-zA-Z0-9\\u4E00-\\u9FA5_^]");
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
Matcher matcher = pattern.matcher(charSequence);
if (!matcher.find()) {
return null;
} else {
Toast.makeText(BookDetailsActivity.this, "不支持输入表情", Toast.LENGTH_SHORT).show();
return "";
}
}
};
/** 表情过滤器 */
InputFilter emojiFilter = new InputFilter() {
//[\\uD83C\\uDF00-\\uD83D\\uDDFF]
//[\\uD83E\\uDD00-\\uD83E\\uDDFF]
// [\\uD83D\\uDE00-\\uD83D\\uDE4F]
//[\\uD83D\\uDE80-\\uD83D\\uDEFF]
Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
Toast.makeText(BookDetailsActivity.this, "不支持输入表情", Toast.LENGTH_SHORT).show();
return "";
}
return null;
}
};
InputFilter[] emojiFilters = {emojiFilter};
et_rb_remark_content.setFilters(emojiFilters);
这里有好多Java中Emoji的正则表达式,可能对屏蔽表情有用。。。
还有这里有好多特殊的正则表达式
网友评论