我有一个简单的TextField
,其中不允许用户键入前导空格。我发现了一些关于从Strings
中删除空白或不允许任何空白的类似答案。但在我的情况下,唯一的限制应该是领先的空白。
这是我在TextFields
中发现的,但它删除了所有空白。
有人能帮我吗?
创建自己的TextInputFormatter
并更改formatEditUpdate(...)
的返回值。
样品:
class NoLeadingSpaceFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue,
) {
if (newValue.text.startsWith(' ')) {
final String trimedText = newValue.text.trimLeft();
return TextEditingValue(
text: trimedText,
selection: TextSelection(
baseOffset: trimedText.length,
extentOffset: trimedText.length,
),
);
}
return newValue;
}
}
用法:
TextField(
inputFormatters: [
NoLeadingSpaceFormatter(),
],
),
没有前导空白正则表达式是
^S
^(?!s)
在Dart中,不要忘记使用原始字符串文字r"^S"
或r"^(?!s)"
。
请参阅regex演示。
详细信息
^S
-字符串开头的任何非空白字符(S
(^(?!s)
-字符串(^
(的开头位置,不能立即跟空白((?!s)
是负前瞻(
您可以使用trimRight()
方法:
没有任何尾随空格的字符串。
作为
trim
,但仅删除尾部空白。
void main() {
print('t Spacet. Dart is funtt'.trimRight()); // ' Space . Dart is fun'
}