【问题标题】:Jetpack Compose TextField InputFilter to have only currency Regex inputsJetpack Compose TextField InputFilter 仅具有货币正则表达式输入
【发布时间】:2021-01-09 11:03:34
【问题描述】:

是否可以有 InputFilters 列表,例如只允许输入,例如 $1,01$100,95 已完成

editText.filters = arrayOf(CurrencyFormatInputFilter(), InputFilter.LengthFilter(8))

class CurrencyFormatInputFilter : InputFilter {

    private val pattern = Pattern.compile(CURRENCY_INPUT_REGEX)

    override fun filter(
        source: CharSequence,
        start: Int,
        end: Int,
        dest: Spanned,
        dstart: Int,
        dend: Int
    ): CharSequence? {

        val result = (dest.subSequence(0, dstart).toString()
                + source.toString()
                + dest.subSequence(dend, dest.length))

        val matcher = pattern.matcher(result)

        return if (!matcher.matches()) dest.subSequence(dstart, dend) else null

    }

}

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    我的建议是在插入的值无效时显示错误。例如:

    fun isValidEmail(emailStr: String?) = 
        Pattern
            .compile(
                "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", 
                Pattern.CASE_INSENSITIVE
            ).matcher(emailStr).find()
    
    ...
    
    var emailText by remember { mutableStateOf("") }
    var showError by remember { mutableStateOf(false) }
    TextField(
        value = emailText,
        onValueChange = {
            emailText = it
            showError = !isValidEmail(it)
        },
        isErrorValue = showError,
        label = { Text(text = "Email") },
        modifier = Modifier.fillMaxWidth()
    )
    if (showError) {
        Text("Email is invalid")
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多