使用FilteringTextInputFormatter时输入不匹配正则致内容清空问题
问题原因与解决办法
问题出在你正则里的^和$锚定符上:这两个符号会要求整个输入文本必须完全匹配正则规则,而FilteringTextInputFormatter.allow的逻辑是,每次输入修改后都会拿完整文本去匹配正则,一旦不匹配就会拒绝这次输入,甚至直接清空全部内容。你用数字正则时正常,应该是没加这两个锚定符(比如只用r"\d"),这时是允许单个数字字符,所以不会触发清空。
解决办法很简单,去掉正则里的^和$,改成只匹配单个合法字符的正则:
inputFormatters: <TextInputFormatter>[ FilteringTextInputFormatter.allow(RegExp(r"[\x00-\x7F’]")) ]
修改后,Formatter会逐个检查输入的字符,只保留属于[\x00-\x7F’]字符集的内容,不合法的字符会被直接过滤掉,而不会清空整个文本框。
内容的提问来源于stack exchange,提问作者Flutter Dev
相关产品推荐
相关产品推荐

