You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中手机号正则验证通过时启用按钮的实现问题

问题原因

你的代码存在3处核心逻辑错误,导致按钮状态不会按预期更新:

  • changeNumbers 方法没有拿实际输入的手机号做正则匹配,反而判断正则表达式本身的字符串长度是否等于NUMBER_LENGTH,且最后强制将按钮状态设为true,前面的判断完全失效
  • formatNumber 方法匹配成功后,错误判断捕获组1(仅为+7或8,长度最多2)的长度是否等于手机号总长度,该条件永远为false
  • 没有对输入的手机号做预处理,带空格的输入会直接匹配失败

修正方案

建议直接通过正则匹配结果判断有效性,不需要额外硬编码长度校验,修正后代码如下:

private val changeButtonAvailable = MutableLiveData(false)

// 预处理输入:移除所有空白字符
private fun clearBlank(input: String): String {
    return input.replace("\\s".toRegex(), "")
}

// 实时校验手机号格式,更新按钮状态
fun validatePhoneNumber(input: String) {
    val cleanedInput = clearBlank(input)
    val regex = "(\\+7|8)[0-9]{10}".toRegex()
    changeButtonAvailable.value = regex.matches(cleanedInput)
}

fun formatNumber(mobile: String): String {
    val cleanedMobile = clearBlank(mobile)
    val regex = "(\\+7|8)[0-9]{10}"
    val pattern = Pattern.compile(regex)
    val matcher = pattern.matcher(cleanedMobile)
    return if (matcher.matches()) {
        changeButtonAvailable.value = true
        // 返回无空格的标准格式用于接口请求
        cleanedMobile
    } else {
        changeButtonAvailable.value = false
        mobile
    }
}

使用说明

当用户输入手机号内容变化时,调用validatePhoneNumber(用户输入的内容)即可实时更新按钮状态,直接观察changeButtonAvailable的值控制按钮启用/禁用即可。

内容的提问来源于stack exchange,提问作者Baish Masirov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:06:01