我在我的應用程序中有一個TextView,我希望用戶只能輸入字母數字字符。這怎麼辦?謝謝!如何限制TextView在Android中僅允許字母數字字符
回答
在XML,把這個:
android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
這裏是一個更好的解決方案......... https://groups.google.com/forum/?fromgroups=#!topic/android-developers/hS9Xj3zFwZA
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
edit.setFilters(new InputFilter[]{filter});
允許大寫字母更好的解決方案。 – 2013-10-17 10:16:50
該解決方案適用於輸入單個字符的簡單情況,但不能正確處理複製和粘貼,或者在EditText上設置了其他'InputFilters'。我發佈了一個更完整的解決方案。 – 2015-12-22 15:40:12
InputFilter
解決方案運行良好,並且可以完全控制篩選出更細粒度的輸入android:digits
。如果所有字符均有效,則filter()
方法應返回null
,或者如果某些字符無效,則應返回僅有效字符的CharSequence
。如果複製並粘貼多個字符,並且其中一些字符無效,則只應保留有效字符(如果有任何字符無效,@AchJ的解決方案將拒絕整個粘貼)。
public static class AlphaNumericInputFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// Only keep characters that are alphanumeric
StringBuilder builder = new StringBuilder();
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (Character.isLetterOrDigit(c)) {
builder.append(c);
}
}
// If all characters are valid, return null, otherwise only return the filtered characters
boolean allCharactersValid = (builder.length() == end - start);
return allCharactersValid ? null : builder.toString();
}
}
此外,設置你的InputFilter
時,你必須確保不寫上您的EditText
其他InputFilters
集;這些可以用XML設置,如android:maxLength
。您還必須考慮設置了InputFilters
的訂單。當與長度過濾器一起使用時,應在長度過濾器之前插入自定義過濾器,這樣粘貼的文本在長度過濾器之前應用自定義過濾器(@ AchJ的解決方案將覆蓋所有其他InputFilters
並僅應用自定義過濾器)。
// Apply the filters to control the input (alphanumeric)
ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(editText.getFilters()));
curInputFilters.add(0, new AlphaNumericInputFilter());
InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
editText.setFilters(newInputFilters);
來簡化setFilters我會做的: editText.setFilters(new InputFilter [] {new CurrencyFormatInputFilter()}); – Rocel 2016-01-27 11:37:14
@Rocel請仔細閱讀我的解釋:「您必須確保不要覆蓋EditText上設置的其他InputFilters;這些可以設置爲XML,例如'android:maxLength'._」您的建議將覆蓋任何其他'InputFilter',就像@ AchJ的解決方案,它不是*我們想在這裏做的。 – 2016-01-27 14:01:27
好吧,我讀錯了,然後,我的不好;) – Rocel 2016-01-27 15:47:33
- 1. 僅在字母數字字符後才允許特殊字符?
- 2. 只允許字母數字字符
- 3. 只允許7個字母數字字符,但無限空間
- 4. 只允許在UITextView中的字母數字字符
- 5. 只允許字母,數字,變音符號,+, - ,並在字符串
- 6. Android:允許用戶在EditText中僅添加字母和特殊字符
- 7. 允許一些特殊字符和字母數字字符
- 8. 僅限數字字段允許使用符號嗎?
- 9. 如何限制字符串不允許使用數字或特殊字符?
- 10. 如何過濾字符串,以便只允許字母數字字符通過
- 11. 如何在TInputQueryWizardPage編輯框中只允許輸入字母數字字符?
- 12. 只允許字母和特殊字符
- 13. 如何在datagridview單元格中允許大寫字母,數字?
- 14. 如何使用preg_match僅允許包含字母和數字字符的字符串?
- 15. 允許並限制一些HTML字符
- 16. 僅允許在XSLT中使用字符和數字
- 17. 如何在Crystal Reports中僅顯示字母數字字符?
- 18. 只允許數字字符
- 19. ASP.NET身份:僅允許字母數字用戶名實現
- 20. 如何允許Android數字鍵盤中的特定字符?
- 21. 允許我的字符串中的數字,字母和任何符號
- 22. Modrewrite允許數字,字母,下劃線
- 23. 只允許字母數字值
- 24. TextBox限制字符串中允許的字符數(並確保它們全部是大寫字母)
- 25. 大寫字母不允許在android res
- 26. 只允許在字母數字和字符之間使用一個字符串
- 27. Zend_Validate_Regex - 只允許字母,數字和字符-_
- 28. jQuery只允許數字,字母和連字符
- 29. 正則表達式屬性,只允許字母數字字符
- 30. 只允許字母,數字,下劃線或連字符django
謝謝,這就是我正在尋找! – 2011-05-21 16:28:50
不錯的答案。很感謝 – 2012-01-31 09:49:52
哇,Android讓它變得如此簡單。 iOS需要1000倍的努力來實現相同的功能。 – Moe 2012-04-24 15:15:32