我需要在TextField(inputFormatters:
中插入什么内容?
我想在一个TextField
中禁止 \ 和 / ,只允许 a 到 Z 在另一个。
答案 0 :(得分:15)
在services library中,您会找到TextInputFormatter
摘要类(这意味着您必须导入package:flutter/services.dart
)。
它已经有两个实现,分别是BlacklistingTextInputFormatter
和WhitelistingTextInputFormatter
。
如果您想要实现自己的格式化程序,可以通过扩展TextInputFormatter
本身并在其中实施formatEditUpdate
来实现。
我将展示如何在给定的上下文中应用两个预制格式化程序。
禁止 \ 和 /
为此,我们将使用BlacklistingTextInputFormatter
:
TextField(inputFormatters: [
BlacklistingTextInputFormatter(RegExp("[/\\\\]")),
])
对于需要提供给格式化程序的Pattern
,我将使用RegExp
,即正则表达式。您可以找到有关here, which also links you to the features I will be using in my examples的更多信息。
支付关注到四重反斜杠\\\\
。这实际上只代表一个反斜杠。原因是在Dart反斜杠是转义键和双反斜杠然后重新表示单个反斜杠,RegExp
也是相同的,其中反斜杠也是转义键。
因此,如果我们阻止a
,b
,F
,!
和.
,我们也会将其列入{{1}像这样:
[...]
这转换为“黑名单所有'a','b','F','!'和'。'“。
只允许 a 到 Z
这次我们使用BlacklistingTextInputFormatter(RegExp("[abF!.]"))
:
WhitelistingTextInputFormatter
为此,我们指定了两个字符范围:TextField(inputFormatters: [
WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),
])
和a-z
,它们也接受指定的两个字符之间的所有字符(此处为所有字母)。这也适用于A-Z
,您可以将任何字符附加到该列表,例如0-9
还会考虑a-zA-Z0-9!.
和!
。
.
这只是为了表明TextField(inputFormatters: [
WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")),
BlacklistingTextInputFormatter(RegExp("[abFeG]")),
])
需要inputFormatters
。实际上你应该用一个白名单和一个正则表达式解决这个问题,但这确实有效。
答案 1 :(得分:8)
其他选项:
小写字母:a-z
大写字母:A-Z
带小写字母的元音:á-ú
重音元音:Á-Ú
注意:空格是为了更好地解释
inputFormatters: [
WhitelistingTextInputFormatter(RegExp("[a-z A-Z á-ú Á-Ú 0-9]"))
]
答案 2 :(得分:2)
BlacklistingTextInputFormatter
和WhitelistingTextInputFormatter
是@Deprecated
版本1.20.0
现在,您可以使用FilteringTextInputFormatter
对InputFormatter
或TextField
进行TextFormField
。
inputFormatters: [FilteringTextInputFormatter.allow(RegExp(r'^ ?\d*')),]
inputFormatters: [FilteringTextInputFormatter.deny(' ')]
inputFormatters: [FilteringTextInputFormatter.digitsOnly]
对于e.x
TextFormField(
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
],
),
答案 3 :(得分:-1)
import'package:flutter / services.dart';
在TextFormField中使用这些参数... maxLength:5 keyboardType:TextInputType.number, inputFormatters:[WhitelistingTextInputFormatter.digitsOnly,]