flutter如何实现正则工具类

在Flutter中如何实现一个通用的正则工具类?我想封装常用的正则验证方法,比如手机号、邮箱、URL等格式校验,方便在项目中复用。请问有没有最佳实践或推荐的实现方式?需要注意哪些性能问题?能否提供完整的代码示例?

2 回复

在Flutter中实现正则工具类,可通过RegExp类封装常用方法,如验证邮箱、手机号等。示例:

class RegexUtil {
  static bool isEmail(String input) {
    return RegExp(r'^\w+@\w+\.\w+$').hasMatch(input);
  }
}

使用时调用RegexUtil.isEmail("test@example.com")即可。

更多关于flutter如何实现正则工具类的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现正则工具类,可以通过创建一个独立的Dart类来封装常用的正则表达式操作。以下是完整的实现方案:

1. 创建正则工具类

class RegexUtil {
  /// 验证邮箱格式
  static bool isEmail(String input) {
    const pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
    return _matches(pattern, input);
  }

  /// 验证手机号(中国)
  static bool isChinesePhone(String input) {
    const pattern = r'^1[3-9]\d{9}$';
    return _matches(pattern, input);
  }

  /// 验证身份证号(中国)
  static bool isChineseIDCard(String input) {
    const pattern = r'^\d{17}[\dXx]$';
    return _matches(pattern, input);
  }

  /// 验证URL
  static bool isUrl(String input) {
    const pattern = r'^https?://[^\s/$.?#].[^\s]*$';
    return _matches(pattern, input);
  }

  /// 提取所有匹配的内容
  static List<String> extractMatches(String pattern, String input) {
    final regex = RegExp(pattern);
    return regex.allMatches(input).map((match) => match.group(0)!).toList();
  }

  /// 替换匹配的内容
  static String replaceAll(String pattern, String input, String replacement) {
    return input.replaceAll(RegExp(pattern), replacement);
  }

  /// 分割字符串
  static List<String> split(String pattern, String input) {
    return input.split(RegExp(pattern));
  }

  /// 私有方法:验证匹配
  static bool _matches(String pattern, String input) {
    if (input.isEmpty) return false;
    return RegExp(pattern).hasMatch(input);
  }
}

2. 使用示例

void main() {
  // 验证邮箱
  print(RegexUtil.isEmail('test@example.com')); // true
  
  // 验证手机号
  print(RegexUtil.isChinesePhone('13800138000')); // true
  
  // 提取数字
  final numbers = RegexUtil.extractMatches(r'\d+', 'abc123def456');
  print(numbers); // ['123', '456']
  
  // 替换内容
  final result = RegexUtil.replaceAll(r'\s+', 'hello  world', ' ');
  print(result); // 'hello world'
}

3. 扩展功能

你还可以根据需要添加更多正则方法:

/// 验证密码强度(至少8位,包含字母和数字)
static bool isStrongPassword(String input) {
  const pattern = r'^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$';
  return _matches(pattern, input);
}

/// 验证IP地址
static bool isIPAddress(String input) {
  const pattern = r'^(\d{1,3}\.){3}\d{1,3}$';
  return _matches(pattern, input);
}

这个工具类提供了常用的正则验证功能,你可以根据具体需求进一步扩展。使用时直接调用静态方法即可,无需创建实例。

回到顶部