问题描述
我有一个简单的 TextField
,不允许用户输入前导空格。我找到了一些关于从 Strings
中删除空格或不允许任何空格的类似答案。但就我而言,唯一的限制应该是前导空格。
This 是我为 TextFields
找到的,但它删除了所有空格。
有人可以帮我吗?
解决方法
您可以使用 trimRight()
方法:
没有任何尾随空格的字符串。
作为 trim
,但只删除尾随空格。
void main() {
print('\t Space\t. Dart is fun\t\t'.trimRight()); // ' Space . Dart is fun'
}
,
创建您自己的 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 demo。
详情
-
^\S
- 字符串开头的任何非空白字符 (\S
) -
^(?!\s)
- 字符串的开头 (^
) 位置,不能紧跟空格((?!\s)
是负前瞻)。