Flutter 用户电话号码 中间显示*
String maskPhoneNumber(String phoneNumber) {
if (phoneNumber.length < 11) {
return phoneNumber;
}
return phoneNumber.substring(0, 3) + '****' + phoneNumber.substring(7);
}
void main() {
String phone = '13800138000';
print(maskPhoneNumber(phone));
}
使用正则表达式
import 'dart:regexp';
String maskPhoneNumberWithRegex(String phoneNumber) {
// 使用正则表达式匹配电话号码中间四位数字
return phoneNumber.replaceAllMapped(RegExp(r'(\d{3})\d{4}(\d{4})'), (match) {
// 将匹配到的中间四位数字替换为 ****
return '${match.group(1)}****${match.group(2)}';
});
}
void main() {
String phone = '13800138000';
print(maskPhoneNumberWithRegex(phone));
}
- \d:这是一个元字符,代表任意一个数字字符,等同于 [0-9]。
- {n}:这是一个量词,表示前面的元素必须恰好出现 n 次。
- ():这是捕获组,用于把正则表达式的一部分括起来,这样就能把匹配到的内容提取出来。
详细点
- (\d{3}):此为第一个捕获组,它会匹配任意连续的三个数字字符。在电话号码的情境下,这通常代表电话号码的前三位(例如手机号码的号段)。
- \d{4}:这会匹配任意连续的四个数字字符,对应电话号码中间需要被掩码处理的四位数字。
- (\d{4}):这是第二个捕获组,会匹配任意连续的四个数字字符,对应电话号码的后四位。
replaceAllMapped 方法会对字符串中所有匹配正则表达式的部分进行替换。它接收两个参数,第一个是正则表达式对象,第二个是一个回调函数。
match.group(1):会返回第一个捕获组匹配到的内容,也就是电话号码的前三位。
match.group(2):会返回第二个捕获组匹配到的内容,也就是电话号码的后四位。
使用字符串替换
String maskPhoneNumberWithCharReplace(String phoneNumber) {
if (phoneNumber.length < 11) {
return phoneNumber;
}
StringBuffer maskedNumber = StringBuffer();
for (int i = 0; i < phoneNumber.length; i++) {
if (i >= 3 && i < 7) {
maskedNumber.write('*');
} else {
maskedNumber.write(phoneNumber[i]);
}
}
return maskedNumber.toString();
}
void main() {
String phone = '13800138000';
print(maskPhoneNumberWithCharReplace(phone));
}