2017-07-25 38 views
2

就像用戶只輸入字母一樣,它會抱怨用戶名必須包含數字,而當用戶只輸入數字時,會抱怨用戶名必須包含字母。如何讓你的編輯文字字母數字? Android示例

這是我的代碼,但它不能正常工作。

if(!username.matches("[a-zA-Z0-9]+")){ 
    Toast.makeText(this, "Username must be alphanumeric", Toast.LENGTH_SHORT).show(); 
    return; 
} 

回答

6

你可以主要檢查後,檢查它們分別

if(!username.matches("[a-zA-Z0-9]+")){ 
    Toast.makeText(this, "Username must be alphanumeric", Toast.LENGTH_SHORT).show(); 
    return; 
} 

if(!username.matches("^.*[0-9].*$")){ 
    Toast.makeText(this, "it should contain numbers", Toast.LENGTH_SHORT).show(); 
    return; 
} 

if(!username.matches("^.*[a-zA-Z].*$")){ 
    Toast.makeText(this, "it should contain letters", Toast.LENGTH_SHORT).show(); 
    return; 
} 

編輯:

要打破正則表達式:

^.*[0-9].*$ - > ^ < - 字符串

的開始

$ < - 字符串

結束

.*匹配任何(也可以匹配空字符串)

[0-9]匹配一些

你也可以但是[a-zA-Z0-9]*取代.*,第一次檢查將採取關心這一點,所以它不是真的有必要。

EDIT 2

另一種方法是檢查它是否只包含字母或數字:我喜歡這一個作爲其更加簡化,但它是必須做的第一檢查

if(!username.matches("[a-zA-Z0-9]+")){ 
    Toast.makeText(this, "Username must be alphanumeric", Toast.LENGTH_SHORT).show(); 
    return; 
} 

if(username.matches("[a-zA-Z]+")){ // only contains letters 
    Toast.makeText(this, "it should contain numbers", Toast.LENGTH_SHORT).show(); 
    return; 
} 

if(username.matches("[0-9]+")){ //only contains numbers 
    Toast.makeText(this, "it should contain letters", Toast.LENGTH_SHORT).show(); 
    return; 
} 
+1

謝謝你,我的好先生! –

+0

通過以下方式與這些符號有什麼區別...?我有點困惑...(^。* []。* $) –

+0

@ChristianBringino請檢查編輯2,它是一個更好的解決方案。 – nafas

0

嘗試這個用戶Editext屬性android:digits這樣你就可以限制用戶進入只允許性格特徵

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:digits="ABCDEFGHIJKLMNOPQRSTUVWX1Z1234567890abcdefghijklmnopqrstuvwxyz "/> 
相關問題