在使用者輸入時驗證輸入內容

您可以在使用者於文字欄位中輸入內容時驗證輸入內容,例如輸入姓名、電子郵件地址、地址或其他聯絡資訊。這項驗證可減少錯誤,並節省使用者時間。

結果

有效的文字輸入內容
圖 1. 文字輸入欄位,其中電子郵件驗證工具顯示有效電子郵件地址的錯誤訊息。
輸入的文字無效,且有錯誤
圖 2. 文字輸入欄位,輸入無效電子郵件地址時會顯示錯誤訊息。

版本相容性

這項實作作業需要將專案 minSDK 設為 API 級別 21 以上。

依附元件

在使用者輸入時驗證輸入內容

請使用下列程式碼顯示欄位輸入內容,並在使用者輸入文字時驗證文字。如果資訊未通過驗證,錯誤訊息會協助使用者修正輸入內容。

class EmailViewModel : ViewModel() {
    var email by mutableStateOf("")
        private set

    val emailHasErrors by derivedStateOf {
        if (email.isNotEmpty()) {
            // Email is considered erroneous until it completely matches EMAIL_ADDRESS.
            !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()
        } else {
            false
        }
    }

    fun updateEmail(input: String) {
        email = input
    }
}

@Composable
fun ValidatingInputTextField(
    email: String,
    updateState: (String) -> Unit,
    validatorHasErrors: Boolean
) {
    OutlinedTextField(
        modifier = Modifier
            .fillMaxWidth()
            .padding(10.dp),
        value = email,
        onValueChange = updateState,
        label = { Text("Email") },
        isError = validatorHasErrors,
        supportingText = {
            if (validatorHasErrors) {
                Text("Incorrect email format.")
            }
        }
    )
}

@Preview
@Composable
fun ValidateInput() {
    val emailViewModel: EmailViewModel = viewModel<EmailViewModel>()
    ValidatingInputTextField(
        email = emailViewModel.email,
        updateState = { input -> emailViewModel.updateEmail(input) },
        validatorHasErrors = emailViewModel.emailHasErrors
    )
}

程式碼重點

  • 定義可重複使用 OutlinedTextField 元件的可組合函式,並新增必要參數,在使用者輸入內容時顯示驗證器錯誤訊息。
  • EmailViewModel 用於維護狀態及提供電子郵件驗證邏輯。
  • 如果 isError 為 true,UI 會提供驗證錯誤狀態的視覺指標。
  • 輸入完整且正確的電子郵件地址前,元件會顯示「電子郵件格式不正確」。

包含本指南的集合

本指南是精選快速指南系列的一部分,涵蓋更廣泛的 Android 開發目標:

文字是任何 UI 的核心元素。瞭解在應用程式中呈現文字的不同方式,提供令人愉悅的使用者體驗。
瞭解如何實作使用者與應用程式互動的方式,包括輸入文字及使用其他輸入方式。

如有問題或想提供意見

前往常見問題頁面,瞭解快速指南或與我們聯絡,分享您的想法。