2014-09-01 43 views
1

我正在創建一個表單,用戶必須輸入名稱而不包含數字或其他字符。代碼Android:驗證Edittext必須寫信

部分是:

bSubmit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String tampSalesName = salesName.getText().toString(); 
       String lala = cekHuruf(tampSalesName); 
       if(lala.equals("number")){ 
        Toast.makeText(RegisterSales.this, "Name must letters", Toast.LENGTH_SHORT).show(); 
       } 


    public String cekHuruf(String a){ 
     String zzzz=""; 
     String aaa=""; 
     int ab=0; 
     for (int i = 0; i < a.length(); i++) { 
      int abc = i++; 
      aaa= a.substring(i, abc); 
      try { 
       ab = Integer.parseInt(aaa); 
      } catch (NumberFormatException sdef) { 
       // TODO: handle exception 
       zzzz="number"; 
      }  
     } 
     return zzzz; 
    } 

,它就會打開String.class並會顯示錯誤:

private StringIndexOutOfBoundsException startEndAndLength(int start, int end) { 
     throw new StringIndexOutOfBoundsException(this, start, end - start); 
    } 

的邏輯:如果第一個字是字母,它會永遠夯實信。所以你對edittext的建議必須寫信。我已經嘗試了幾種方法來改變xml中的輸入類型並嘗試使用android EditText alphabet-only validation中的方法,但仍然無法工作。

+0

我認爲ü要使用的驗證上的EditText – 2014-09-01 08:16:43

+0

@NaveenTamrakar是的,我想使用驗證。那麼邏輯和語法是什麼? – novie 2014-09-01 08:22:52

+0

你知道java中的正則表達式嗎 – 2014-09-01 08:53:05

回答

2

使用此代碼

name.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      // TODO Auto-generated method stub 
     } 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 
     } 
     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
      Is_Valid_Person_Name(name); // pass your EditText Obj here. 
     } 
    }); 

public void Is_Valid_Person_Name(EditText edt) throws NumberFormatException { 
    if (edt.getText().toString().length() <= 0) { 
     edt.setError("Accept Alphabets Only."); 
     valid_name = null; 
    } else if (!edt.getText().toString().matches("[a-zA-Z ]+")) { 
     edt.setError("Accept Alphabets Only."); 
     valid_name = null; 
    } else { 
     valid_name = edt.getText().toString(); 
    } 

} 

它將幫助。

+0

thankyouuu!這項工作:) – novie 2014-09-01 08:33:52

+0

@novie Welocome ... – Rahul 2014-09-01 09:45:20

0
  <EditText 
       android:id="@+id/username" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" > 

      </EditText> 
+0

我不知道爲什麼,這種伎倆沒有爲我工作。無論如何謝謝你的幫助! – novie 2014-09-01 08:31:44

0

使用此代碼

 b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      String a=salesName.getText().toString(); 
      Boolean z=cekHuruf(a); 
      if(!z) 
      { 
       Toast.makeText(MainActivity.this, "Name must letters", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     public boolean cekHuruf(String b){ 
      char[] chars = b.toCharArray(); 

      for (char c : chars) { 
       if(!Character.isLetter(c)) { 
        return false; 
       } 
      } 

      return true; 
     } 
    });