如何限制textview接受部分或全部特殊字符?

时间:2014-07-11 22:55:20

标签: java android sqlite sql-injection

我想知道是否有一种方法可以限制用户输入特殊字符,用户只能输入A-z和0-9字符并防止在Android中进行任何SQL注入?这里的最佳做法是什么?

谢谢。

3 个答案:

答案 0 :(得分:0)

对于EditText,您可以添加TextWatcher监听器

edt.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        } 

    });

onTextChanged()afterTextChanged()中,您可以获取文字并删除不会出现的字符,您可以使用rejex来简化。

答案 1 :(得分:0)

可以使用InputFilter来验证用户在EditText中输入的内容。

  

当缓冲区要替换范围时,将调用此方法   dstart ... dend of dest with the new text from the range start ... end of   资源。返回您想要放置的CharSequence   相反,如果合适,包括空字符串,或null   接受原来的替代品。

例如,像这样:

InputFilter filter = new InputFilter()
{
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
    {
        if (source.toString().contains("'"))
            return "";
        else
            return null; // Accept original replacement.
    }

};

editText.setFilters(new InputFilter[] { filter });

但是,这将是一种避免SQL注入的非常糟糕的方法。在数据层中使用parameterized queries会更好。

答案 2 :(得分:0)

您可以将EditText与这些xml选项一起使用:

<EditText 
  android:inputType="text" 
  android:digits="0123456789qwertzuiopasdfghjklyxcvbnm" 
  android:hint="Only letters, digits allowed"/>

虽然记住你是否正确使用SQLitedatabase的查询方法,但它会自行防止所有SQL注入。