在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);
}
这个工具类提供了常用的正则验证功能,你可以根据具体需求进一步扩展。使用时直接调用静态方法即可,无需创建实例。