0

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

我确实尝试了以下方法:

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 中正则表达式的好链接以及完整的例子,请推荐。

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

4

1 回答 1

1

而不是在之后立即运行检查

EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString; 

使用OnFocusChangeListener并在调用 onFocusChange()方法时运行它。理想情况下,您只会在视图失去焦点时运行它。就像是:

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
        }
    }
});

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

于 2013-04-22T14:00:14.623 回答