Muj*_*uje 2 forms input trim dart flutter
我有不同的表单字段,我想validator
在触发方法之前默认修剪表单字段的每个值。
我想要实现这一点的原因是,如果我regex
在validator
方法被触发时对 Input 值运行 a ,正则表达式将返回 false,input_text.hasMatch
因为输入值末尾有一个无用的空格字符。
例如。alphaNumericText.hasMatch(val)
由于输入值末尾有一个无用的额外空格字符,下面的代码将返回 false。
final alphaNumericText = RegExp(r'^[a-zA-Z0-9]+$');
TextFormField(
keyboardType: TextInputType.text,
decoration: new InputDecoration(
labelText: 'Enter your nickname',
),
validator: (val) {
if (val.isEmpty == true) {
return 'Nickname is required!';
}
if (alphaNumericText.hasMatch(val) == false) {
return 'Use alphanumeric characters only in nickname.';
}
return null;
},
onSaved: (val) => this.nickname = val,
),
Run Code Online (Sandbox Code Playgroud)
注意我不想通过修改alphaNumericText RegExp
输入值末尾的额外空格来实现这一点。我不想以这种方式实现这一目标。
我想要的是在调用方法之前默认验证表单中所有 TextField 中的每个值validator
。
小智 6
只需添加
inputFormatters: [WhitelistingTextInputFormatter(RegExp(r'[a-zA-Z0-9]'))],
Run Code Online (Sandbox Code Playgroud)
作为 TextInputField 的属性,用户甚至无法输入空格或除白名单之外的任何其他字符,您还可以从验证器中删除其他检查
完整示例
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: Center(
child: TextFormField(
inputFormatters: [WhitelistingTextInputFormatter(RegExp(r'[a-zA-Z0-9]'))],
keyboardType: TextInputType.text,
decoration: new InputDecoration(
labelText: 'Enter your nickname',
),
validator: (val) {
if (val.isEmpty == true) {
return 'Nickname is required!';
}
return null;
},
onSaved: (val) {},
),
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)