Flutter TextField输入格式化器无法输入开头+,正则测试通过求解决
问题原因与解决方案
核心问题
你使用的正则表达式 ^\+[0-9]+ 要求文本必须以+开头且后面至少跟一个数字,但在输入过程中,当你刚输入+时,整个文本只有+,不满足[0-9]+(至少一个数字)的要求,因此被FilteringTextInputFormatter拦截,导致无法输入+。
而你在DartPad中测试的是完整的号码+310612345678,这个字符串完全符合正则规则,所以返回true——但这和输入时的逐步验证场景逻辑不同。
修正方案
调整正则表达式,允许+后面可以跟0个或多个数字,这样输入单独的+时也能通过验证:
inputFormatters: [ FilteringTextInputFormatter.allow( RegExp(r'^\+[0-9]*'), ), ],
如果需要确保最终输入的是+加至少一个完整数字,可以在提交表单时再做额外校验:
bool isValidPhone(String input) { return RegExp(r'^\+[0-9]+$').hasMatch(input); }
这样既保证输入过程中能正常输入+,又能在提交时验证格式是否合规。
内容的提问来源于stack exchange,提问作者anonymous-dev
相关产品推荐
相关产品推荐

