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
相关产品推荐
相关产品推荐

