当前位置: 首页 > article >正文

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));
}

http://www.kler.cn/a/594986.html

相关文章:

  • 反射型(CTFHUB)
  • redis MISCONF Redis is configured to save RDB snapshots报错解决
  • 【Kafka】深入了解Kafka
  • C# MethodBase 类使用详解
  • acwing1295. X的因子链
  • CMake 函数和宏
  • 嵌入式软件单元测试的必要性、核心方法及工具深度解析
  • 在 Windows 系统下,将 FFmpeg 编译为 .so 文件
  • Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套
  • 对敏捷研发的反思,是否真是灵丹妙药?
  • HTTPS 加密过程详解
  • 【SpringBoot】MorningBox小程序的完整后端接口文档
  • 3.20【L】algorithm
  • 「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(一)
  • HTML5响应式使用css媒体查询
  • teaming技术
  • Python深浅拷贝
  • 【QA】装饰模式在Qt中有哪些运用?
  • 服务器——报错解决:移动文件时,bash: /usr/bin/mv: Argument list too long
  • Java基础关键_027_IO流(五)