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

