EditText限制输入表情和特殊符号的处理

1、限制输入表情

public class EmojiEditText extends EditText {
 
    private Context mContext;
 
    public EmojiEditText (Context context) {
        super(context);
        this.mContext = context;
        initEditText();
    }
 
    public EmojiEditText (Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        initEditText();
    }
 
    public EmojiEditText (Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.mContext = context;
        initEditText();
    }
 
 
private void initEditText() {
    addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int before, int count) {
 
        }
 
 
        @Override
        public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
            if (count - before >= 1) {
                CharSequence input = charSequence.subSequence(start + before, start + count);
                if (isEmoji(input.toString())) {
              Toast.makeText(mContext,"不支持emoji表情",Toast.LENGTH_SHORT).show();
                    ((SpannableStringBuilder) charSequence).delete(start + before, start + count);
                }
            }
        }
 
        @Override
        public void afterTextChanged(Editable editable) {
        }
    });
}
/**
 * 正则判断emoji表情
 *
 * @param input
 * @return
 */
private boolean isEmoji(String input) {
    Pattern p = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\ud83e\udc00-\ud83e\udfff]" +
            "|[\u2100-\u32ff]|[\u0030-\u007f][\u20d0-\u20ff]|[\u0080-\u00ff]");
    Matcher m = p.matcher(input);
    return m.find();
}
}

2、禁止EditText输入特殊字符

  /**
     * 禁止EditText输入特殊字符
     *
     * @param editText
     */
    public static void setEditTextInhibitInputSpeChats(EditText editText) {
 
        InputFilter filter = (source, start, end, dest, dstart, dend) -> {
            if (!TextUtils.isEmpty(source)) {
                SpannableString ss = new SpannableString(source);
                Object[] spans = ss.getSpans(0, ss.length(), Object.class);
                if (spans != null) {
                    //   String speChat="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
                   
//这里也可以根据自己的需求自行添加需要判断的特殊符号
 if (source.toString().equals("\"") || source.toString().equals("\'")) {
                        return "";
                    }
                    String speChat = "[`''<>/”“’]";
                    Pattern pattern = Pattern.compile(speChat);
                    Matcher matcher = pattern.matcher(source.toString());
                    if (matcher.find()) {
                        return "";
                    } else {
                        return null;
                    }
                }
            }
            return null;
        };
        editText.setFilters(new InputFilter[]{filter});
    }


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_42467528/article/details/125442060

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值