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

如何将PhoneNumberFormattingTextWatcher格式化号码转为纯数字字符串?

如何将格式化后的电话号码转为纯数字字符串

刚好遇到过类似的场景,你已经通过PhoneNumberFormattingTextWatcher实现了EditText的电话号码格式化,得到了(123) 456-7890这类带符号的格式,现在要提取纯数字字符串,这里有两种简单有效的方法:

方法一:正则表达式快速替换

利用正则表达式匹配所有非数字字符,直接替换为空字符串,代码精简高效:

// 你的原有代码
etPhoneNumber.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
// 获取格式化后的号码
String formattedNumber = etRegisPhoneNumber.getText().toString();
// 过滤非数字字符,得到纯数字
String pureNumber = formattedNumber.replaceAll("[^0-9]", "");

[^0-9]是正则表达式的反向匹配,意思是“所有不是0-9的字符”,替换后就只剩下纯数字了,完美适配你需要的1234567890格式。

方法二:遍历字符筛选(更直观可控)

如果你想更清晰地控制筛选逻辑,或者后续有特殊字符过滤需求,可以逐个遍历字符,只保留数字:

// 你的原有代码
etPhoneNumber.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
// 获取格式化后的号码
String formattedNumber = etRegisPhoneNumber.getText().toString();
// 构建纯数字字符串
StringBuilder pureNumberBuilder = new StringBuilder();
for (char c : formattedNumber.toCharArray()) {
    if (Character.isDigit(c)) {
        pureNumberBuilder.append(c);
    }
}
String pureNumber = pureNumberBuilder.toString();

这种方式虽然代码稍长,但逻辑一目了然,后期如果需要保留特定符号(比如国际区号的+),只需要调整判断条件即可。

两种方法都能完美处理你当前的格式化号码转换需求,根据自己的习惯选择就好~

内容的提问来源于stack exchange,提问作者SO 80

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:07