表格验证Android

时间:2013-04-22 13:42:37

标签: android regex validation

我想知道验证表单的最佳方法是什么?

我确实尝试了以下内容:

EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString; 
if(fname_text.equalsIgnoreCase(""))
        {
            fname.setError("Field is required");
        }

还有:

fname.addTextChangedListener(new TextWatcher() 
        {           
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count){

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

            }           
            @Override
            public void afterTextChanged(Editable s) 
            {

                Pattern mPattern = Pattern.compile("[A-Za-z]{2,20}$");

                Matcher matcher = mPattern.matcher(s.toString());               
                if(!matcher.matches())       // on Success 
                { 
                    fname.setError("Please make sure you input a valid first name");

                }
              }
        });

我感到困惑的是......每当第一次加载页面时,都会显示错误消息,但是当我进入EditText并输入一些内容时,如果我删除内容,错误消息不会持久。那么如何保持此验证持久???因为程序的形成方式,看起来它不会很好地验证任何东西。你们知道Android中正则表达式的一些很好的链接,请完整的例子,请做推荐。

而且,我如何将onTextChanged或beforeTextChanged中的Pattern和Matcher方法影响输出?

1 个答案:

答案 0 :(得分:1)

而不是在

之后立即运行检查
EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString; 

使用OnFocusChangeListener并在调用onFocusChange()方法时运行它。理想情况下,只有在View失去焦点时才会运行它。类似的东西:

EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString; 
fname.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View arg0, boolean arg1) {
        if(!(v.isFocused())) {
            //Run your validation
        }
    }
});

这样,您只需在用户完成输入时运行验证,而不是每次用户更改时都运行验证。