如何在Form Field Validator验证前修剪TextField中的字符串?
解决邮箱末尾空格导致验证失败的问题
有几种实用方案可以实现验证前去除邮箱首尾空格的需求:
方法一:包装验证器,先处理输入再验证
直接在validator回调里对输入值做trim()处理,再传给EmailValidator执行验证逻辑:
TextFormField( onChanged: (val) => selectedEmail = val, validator: (value) { // 先去除输入内容的首尾空格 final trimmedValue = value?.trim(); // 用处理后的值调用EmailValidator的验证方法 return EmailValidator(errorText: "Email is not valid").validate(trimmedValue); }, )
方法二:在输入变更时直接处理空格
如果希望保存的selectedEmail本身就是去除空格后的干净内容,可以在onChanged阶段就做trim处理:
TextFormField( onChanged: (val) => selectedEmail = val.trim(), validator: EmailValidator(errorText: "Email is not valid"), )
这种方式下,验证器拿到的已经是处理后的无空格邮箱,同时保存的变量也不会包含多余空格。
方法三:用输入格式化器从源头限制空格
还可以通过inputFormatters阻止用户输入首尾空格,从根源避免无效输入:
TextFormField( onChanged: (val) => selectedEmail = val, validator: EmailValidator(errorText: "Email is not valid"), inputFormatters: [ FilteringTextInputFormatter.deny(RegExp(r'^\s+|\s+$')), ], )
这个格式化器会禁止输入开头和结尾的空格,用户无法输入带尾空格的无效邮箱。
内容的提问来源于stack exchange,提问作者Agung
相关产品推荐
相关产品推荐

