<EditText
android:inputType="text"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-"
android:hint="僅限字母、數字、底線、連字號" />
系統鍵盤會自動過濾,不合法字元無法輸入,無需任何 Java/Kotlin 代碼。
InputFilter filter = (source, start, end, dest, dstart, dend) -> {
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (!Character.isLetterOrDigit(c) && c != '_' && c != '-') {
return ""; // 丟棄該字元
}
}
return null; // 保留原字元
};
editText.setFilters(new InputFilter[]{filter});
注意:原始回答的邏輯有誤(|| 應為 &&),以上已修正。
會導致游標跳動、輸入體驗差,僅適合事後驗證顯示錯誤訊息。
| 場景 | 推薦方案 |
|---|---|
| 固定字元集、無複雜邏輯 | XML android:digits |
| 規則需動態計算、或含 Unicode 字元 | InputFilter |
| 需即時顯示錯誤提示 | TextWatcher + 紅色底線/Error |