Android输入框正则表达式验证的问题

我想做的是输入框里面部分特殊符号不允许输入。

private boolean isSymbol(String input){
    Pattern pattern = Pattern.compile("[`~!@#$^&*_+=|{}':;,\\[\\]<>/?!¥…()—·‘:”“’?]|[\u3010-\u3011]|[\u007d-\u007e]|[\u0060]|[\u00b7]|[\u007b]|[\\u005c]");
    Matcher matcher = pattern.matcher(input);
    return matcher.find();
}


inputtext1.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 (isSymbol(input.toString())) {
                toast("不支持特殊符号");
                ((SpannableStringBuilder) charSequence).delete(start + before, start + count);
             }
        }
    }

    @Override
    public void afterTextChanged(Editable editable) { }
});

执行后出现的问题有
1、中文的~这个按键的三种字符都不能识别,还是可以输入(· ~ `)
2、中文的{ }也是仍然可以输入