Flutter正则表达式验证文本字段插件regex_pattern_text_field的使用
Flutter正则表达式验证文本字段插件 regex_pattern_text_field
的使用
RegexPatternTextField
是一个强大的 Flutter 小部件,它简化了在文本字段中进行模式匹配和应用样式的工作。这个小部件特别适用于高亮显示 URL、电子邮件、标签(hashtags)、提及(mentions)等模式。
功能特性
- 模式匹配:根据预定义或自定义的正则表达式模式识别并样式化文本。
- 可定制样式:为每个匹配的模式应用独特的文本样式。
- 实时更新:动态监控并响应输入的变化。
- 可扩展性:轻松添加新的正则表达式模式及其对应的样式。
开始使用
安装
在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
regex_pattern_text_field: ^1.0.0
运行以下命令来获取包:
flutter pub get
导入包
在 Dart 文件中导入 regex_pattern_text_field
包:
import 'package:regex_pattern_text_field/regex_pattern_text_field.dart';
使用方法
基本示例
将标准的 TextField
替换为 RegexPatternTextField
,并使用 RegexPatternTextStyle
定义模式和样式。
RegexPatternTextField(
maxLines: null,
regexPatternController: _controller,
onChanged: (matches, text) {
print("Text changed: $text");
},
onSubmitted: (matches, text) {
print("Text submitted: $text");
},
defaultRegexPatternStyles: true,
regexPatternStyles: [
RegexPatternTextStyle(
type: "email",
regexPattern: r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}",
textStyle: const TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
),
RegexPatternTextStyle(
type: "hashtag",
regexPattern: r"#\w+",
textStyle: const TextStyle(color: Colors.green, fontStyle: FontStyle.italic),
),
],
onMatch: (model) {
print("Matched pattern: ${model.type}, Text: ${model.text}");
},
onNonMatch: (text) {
print("No match for: $text");
},
);
回调函数
onMatch
:当正则表达式模式匹配到部分文本时触发,提供详细的匹配信息。onNonMatch
:当没有模式匹配到文本时调用。onChanged
:每次文本变化时执行,提供实时反馈。onSubmitted
:当用户提交文本时(例如按下回车键)调用。
自定义
添加新模式
可以动态定义额外的模式:
RegexPatternTextStyle(
type: "customPattern",
regexPattern: r"\d{4}-\d{2}-\d{2}", // 匹配 YYYY-MM-DD 格式的日期
textStyle: const TextStyle(color: Colors.orange, fontWeight: FontWeight.bold),
);
组合默认和自定义样式
可以在启用默认样式的同时添加自定义样式:
RegexPatternTextField(
defaultRegexPatternStyles: true,
regexPatternStyles: [
// 在这里添加自定义样式
],
);
完整示例应用
以下是一个完整的示例应用,展示了如何使用 RegexPatternTextField
:
import 'package:flutter/material.dart';
import 'package:regex_pattern_text_field/regex_pattern_text_field.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: RegexPatternDemo(),
);
}
}
class RegexPatternDemo extends StatefulWidget {
const RegexPatternDemo({Key? key}) : super(key: key);
[@override](/user/override)
State<RegexPatternDemo> createState() => _RegexPatternDemoState();
}
class _RegexPatternDemoState extends State<RegexPatternDemo> {
final RegexPatternTextEditingController _controller = RegexPatternTextEditingController();
List<RegexPatternMatched> matches = [];
[@override](/user/override)
void initState() {
super.initState();
_controller.addListener(() {
setState(() {
matches = _controller.regexPatternMatchedList;
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Regex Pattern Text Field'),
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: RegexPatternTextField(
maxLines: null,
regexPatternController: _controller,
onChanged: (matches, text) => debugPrint("Text changed: $text"),
regexPatternStyles: [
RegexPatternTextStyle(
type: "email",
regexPattern: r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}",
textStyle: const TextStyle(color: Colors.blue),
),
],
),
),
Expanded(
child: ListView.builder(
itemCount: matches.length,
itemBuilder: (context, index) {
final match = matches[index];
return ListTile(
title: Text("Matched Text: ${match.text}"),
subtitle: Text("Type: ${match.type}"),
);
},
),
),
],
),
);
}
}
更多关于Flutter正则表达式验证文本字段插件regex_pattern_text_field的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter正则表达式验证文本字段插件regex_pattern_text_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用regex_pattern_text_field
插件进行正则表达式验证文本字段的示例代码。首先,你需要确保已经在pubspec.yaml
文件中添加了regex_pattern_text_field
依赖:
dependencies:
flutter:
sdk: flutter
regex_pattern_text_field: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
以下是一个完整的Flutter应用示例,展示了如何使用regex_pattern_text_field
插件来验证电子邮件地址格式的文本字段:
import 'package:flutter/material.dart';
import 'package:regex_pattern_text_field/regex_pattern_text_field.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Regex Pattern TextField Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Regex Pattern TextField Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Center(
child: EmailValidationForm(),
),
),
),
);
}
}
class EmailValidationForm extends StatefulWidget {
@override
_EmailValidationFormState createState() => _EmailValidationFormState();
}
class _EmailValidationFormState extends State<EmailValidationForm> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
String _email = '';
String _errorMessage = '';
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RegexPatternTextField(
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
labelText: 'Email',
errorText: _errorMessage,
),
pattern:
r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', // 简单的电子邮件正则表达式
errorText: '请输入有效的电子邮件地址',
onChanged: (value) {
setState(() {
_email = value;
_errorMessage = null; // 清除错误信息
});
},
validator: (value) {
if (value.isEmpty) {
setState(() {
_errorMessage = '电子邮件地址不能为空';
});
return null;
} else if (!RegExp(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')
.hasMatch(value)) {
setState(() {
_errorMessage = '请输入有效的电子邮件地址';
});
return null;
}
return null;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// 执行提交逻辑,例如打印电子邮件地址
print('Email: $_email');
}
},
child: Text('提交'),
),
],
),
);
}
}
在这个示例中,我们创建了一个简单的表单,包含一个使用RegexPatternTextField
的文本字段。RegexPatternTextField
的pattern
属性用于指定正则表达式,这里是用于验证电子邮件地址的简单正则表达式。errorText
属性定义了当输入不匹配正则表达式时显示的错误消息。
注意,虽然RegexPatternTextField
提供了内置的验证功能,但在这个示例中,我仍然添加了validator
回调来演示如何在表单验证中使用自定义逻辑。这可以帮助你在RegexPatternTextField
的基础上添加额外的验证条件。
请确保根据实际需求调整正则表达式和UI设计。