EditText中的多种语言没有特殊字符

时间:2014-02-04 04:03:27

标签: android sqlite android-edittext special-characters

我有一个EditText,我不希望允许任何特殊字符,因为我将此String存储在SQLlite数据库中。现在我使用:

<item name="android:digits">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789</item>

这适用于英语。但是,当我将键盘切换为其他语言(日语,俄语,印地语等)时,我无法输入任何内容。这样做的正确方法是什么?

另外:

我正在使用ContentProvider访问我的SQLite数据库。所以我有从数据库读取/写入的方法

context.getContentResolver().insert(uri, values);
context.getContentResolver().delete(uri, values);
context.getContentResolver().query(uri, values); //for a special case, but only uses id=? in the query
context.getContentResolver().update(uri, values);

所以我需要逃避特殊角色吗?

2 个答案:

答案 0 :(得分:0)

//try to add this fillter
InputFilter[] filters = new InputFilter[1];

filters[0] = new InputFilter() {
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (end > start) {
            String destTxt = dest.toString();
            String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);

            if (!resultingTxt.matches("[a-zA-Z0-9?]*")) {
                if (source instanceof Spanned) {
                    SpannableString sp = new SpannableString("");
                    return sp;
                } else {
                    return "";
                }
            }
        }

        return null;
    }
};

edtiText.setFilters(filters);

答案 1 :(得分:0)

我知道回答你的问题有点晚了,但也许这有助于未来的某些人。

你需要的是像Haresh的答案这样的过滤器,但修改常规表达式,如:

    private InputFilter filter = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend) {
        if(src.toString().matches("[\\p{Alnum}]*")){
            return src;
        }
        return "";
    }
};

如果您不想在editText中输入数字,请更改

"[\\p{Alnum}]*"

用这个

"[\\p{Alpha}]*"

如果您需要更具体的内容,请查看此link

PD:我在我的应用程序中使用了这个代码,支持英语,西班牙语和法语,并且它的工作正常。

我希望这可以帮助别人!