2012-04-26 74 views
0

我有EditBox,我必须检查用户输入的数字是否正确。为此,我想调用这样的事件,只要号码正确,用户可以在EditBox中输入一个数字;否则,如果数字不正确,则不允许用户输入编辑框。如何做到这一点。任何示例都会对我有所帮助。如何在EditText中执行验证

+0

不。给出验证的例子或模式。 – 2012-04-26 06:54:19

+0

看看这个http://stackoverflow.com/q/2763022/1021695 – KMI 2012-04-26 06:54:47

回答

4

使用onTextChangedListener()并验证其beforeTextChangedMethod()..像这里面..

((EditText)findViewById(R.id.et_testo)).addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
     ((TextView)findViewById(R.id.numcaratteri)).setText(String.format(getString(R.string.caratteri), s.length())); 

    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // Validate here 

    } 

    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
     // TODO Auto-generated method stub 

    } 

}); 
+0

其实在编辑框中输入只我想验证号码,我不允许用户键入错误的日期。意味着用户只能输入正确的号码。我不允许用户输入错误的号码。 – AndroidDev 2012-04-26 07:02:20

+0

@Anshuman ..然后不清除方法里面的方法,如果它的无效,否则设置它... – ngesh 2012-04-26 07:10:37

+0

你可以告诉我一个例子..请我卡在它一个小时 – AndroidDev 2012-04-26 07:12:18

1

你将不得不使用TextWatcher

你可以随便去HERE。例子也在这里给出,你可以参考它。

2
final Pattern pattern = Pattern.compile("[0-9]"); 
editText.addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
     Matcher matcher = pattern.matcher(s); 
     if (matcher.find()) 
     { 
      s.replace(0, s.length(), s.toString().replaceAll("[0-9]", "")); 
     } 
    } 

    public void beforeTextChanged(CharSequence s, int start, 
      int before, int count) { 
     // TODO Auto-generated method stub 
    } 

    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
     // TODO Auto-generated method stub 
    } 

}); 
+0

真是太棒了!正确的钱:) – 2013-03-14 07:43:47

0

可以使用2种方式
1. textwatcher
2.输入过滤
我附上其中包括代码都

public class MainActivity extends Activity { 
EditText editTxt; 
private TextView regresult; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    editTxt =(EditText)findViewById(R.id.editID); 
    regresult = (TextView)findViewById(R.id.txtID); 
    String urName=editTxt.getText().toString(); 

    editTxt.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});  
    editTxt.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {  
     }   
     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
     }   
     @Override 
     public void afterTextChanged(Editable s) { 
       if (editTxt.getText().toString().matches("(^([0-9]{0,3})?)(\\.[0-9]{0,1})?$")) 
       { 
        regresult.setText(""); 
       } 
       else 
       { 
        regresult.setText("invalid number"); 
       } 
     } 
    }); 
}} 


class DecimalDigitsInputFilter implements InputFilter 
{ 
Pattern mPattern; 

public DecimalDigitsInputFilter() 
{ 
    mPattern = Pattern.compile("(^([0-9]{0,2})?)(\\.[0-9]{0,1})?$"); //here u can give your required pattern 
} 
@Override 
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
    // TODO Auto-generated method stub 
    Matcher matcher = mPattern.matcher(dest); 
     if(!matcher.matches()) 
     { 
      return ""; 
     } 
     return null; 
}} 
你想要哪种数字来允许和