首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

验证并仅允许在TextField中使用日期和连字符-- MaskTextInputFormatter不适用于手动更新文本

问题:验证并仅允许在TextField中使用日期和连字符-- MaskTextInputFormatter不适用于手动更新文本。

回答: 在Flutter中,可以使用TextField组件来实现文本输入功能。要验证并仅允许在TextField中使用日期和连字符,可以使用InputFormatter来限制输入的格式。

MaskTextInputFormatter是一个常用的输入格式化器,可以根据指定的掩码格式来限制输入内容。然而,它在手动更新文本时可能会出现问题。

为了解决这个问题,可以自定义一个输入格式化器来验证并限制输入内容。下面是一个示例代码:

代码语言:txt
复制
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class DateMaskTextInputFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    // 获取新的文本
    String newText = newValue.text;

    // 验证并限制输入内容
    if (newText.isNotEmpty) {
      // 只允许输入数字和连字符
      RegExp regExp = RegExp(r'^[\d-]+$');
      if (!regExp.hasMatch(newText)) {
        // 输入内容不符合要求,返回旧的文本
        return oldValue;
      }

      // 根据指定格式添加连字符
      if (newText.length == 4 || newText.length == 7) {
        newText += '-';
      }
    }

    // 返回新的文本
    return newValue.copyWith(text: newText);
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Date Mask Example'),
        ),
        body: Center(
          child: Padding(
            padding: EdgeInsets.all(16.0),
            child: TextField(
              inputFormatters: [
                DateMaskTextInputFormatter(),
              ],
              decoration: InputDecoration(
                labelText: 'Date',
              ),
            ),
          ),
        ),
      ),
    );
  }
}

在上面的示例中,我们自定义了一个DateMaskTextInputFormatter类,继承自TextInputFormatter,并重写了formatEditUpdate方法。在这个方法中,我们验证并限制输入内容,只允许输入数字和连字符,并根据指定格式添加连字符。

然后,在TextField的inputFormatters属性中使用我们自定义的输入格式化器。

这样,当用户在TextField中输入内容时,会自动根据指定格式添加连字符,并且只允许输入数字和连字符,其他字符会被过滤掉。

这是一个简单的示例,你可以根据自己的需求进行修改和扩展。

腾讯云相关产品推荐:

  • 云服务器(CVM):提供弹性计算能力,满足各种业务需求。产品介绍
  • 云数据库 MySQL 版(CDB):提供稳定可靠的云端数据库服务。产品介绍
  • 云存储(COS):提供安全可靠的对象存储服务,适用于各种场景。产品介绍
  • 人工智能开发平台(AI Lab):提供丰富的人工智能开发工具和服务。产品介绍
  • 物联网开发平台(IoT Explorer):提供全面的物联网解决方案和服务。产品介绍

以上是腾讯云提供的一些相关产品,你可以根据具体需求选择适合的产品来支持你的云计算和开发工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SwiftUI TextField进阶——格式与校验

第二种思路,则是不使用黑魔法,通过SwiftUI的原生方式,录入文本发生变化时,对文本进行格式化。本文的方案二是该思路的具体实现。...如何在TextField屏蔽无效字符 现有屏蔽字符方法 SwiftUI,可以通过设置使用特定的键盘类型来实现一定程度上的录入限制。...可能的屏蔽字符解决思路 •使用UITextFieldDelegate的textField方法•SwiftUI的视图中,使用onChange录入发生变化时进行判断修改 第一种思路,仍需使用Introspect...,例如对TextField二度包装(采用View),方案二使用属性包装器对数字字符串进行桥接等。...本文涉及了TextField的部分内容,【SwiftUI TextField进阶】的其他篇幅,我们将探讨更多的技巧思路,让开发者SwiftUI创建不一样的文本录入体验。

8.2K20
  • java Swing用户界面组件文本输入:文本域+密码域+格式化的输入域

    提示:从JDK 1.3开始,可以在按钮、标签菜单项上使用无格式文本HTML文本。 我们不推荐在按钮上使用HTML文本—这样会影响观感。但是HTML文本标签是非常有效的。...格式化的输入域 在上一个例子,希望用户输入数字,而不是任意的字符串。就是说只允许用户输入0~9的数字加上字符(-)。并且如果是字符,必须是输入的第一个符号。 从表面上看,对输入进行检验十分简单。...某些观感上,一些特定的键组合用于实现剪切、复制粘贴文本操作。例如,Metal观感上,组合键CTRL+V把缓冲区的内容粘贴到文本域中。所以,需要监视以保证用户粘贴的是一个有效的字符。...从本书的第1版开始,我们就提供了一个用于输入格式化整型的文本域IntTextField。(每个新版本,都会改变一些不成熟的验证机制的实现。)...最终,JDK 1.4,Swing设计者面对问题,提供了一个多功能的JFormattedTextField类,这个类不仅可以用于输入数值,也可以用于输入时间更加复杂的格式化数值,如IP地址。

    4.1K10

    【愚公系列】2023年11月 Winform控件专题 MaskedTextBox控件详解

    一、MaskedTextBox控件详解MaskedTextBox控件是Winform的一个文本框控件,用于限制用户输入的格式。它允许您指定输入格式自动格式化输入。...1.2 AsciiOnlyMaskedTextBox控件的AsciiOnly属性是用来限制用户输入框输入的字符必须是ASCII字符。这个属性对于需要输入非ASCII字符的情况并不适用。...1.3 BeepOnErrorMaskedTextBox控件是Winform的一种输入控件,可以对输入内容进行格式化验证。...ImeMode属性的取值如下:Alpha:普通的输入法模式,适用于输入字母、数字符号等。Kana:用于日语输入法,用于输入平假名片假名。Hangul:用于韩语输入法,用于输入韩文。...2.常用场景MaskedTextBox 控件常用于需要对输入文本格式进行限制控制的场景,比如:日期时间输入:可以通过设定日期格式等限制用户输入的日期时间格式。

    92411

    Django 系列博客(十三)

    DateField 日期字段,日期格式 YYYY-MM-DD,相当于Python的datetime.date()实例。...- 必须提供max_length参数, max_length表示字符长度 TextField(Field) - 文本类型 EmailField(CharField): - 字符串类型,Django...(Field) - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4Ipv6 - 参数: protocol,用于指定Ipv4或Ipv6, 'both', "ipv4",...to 设置要关联的表 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。 symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作的字段。...models.OneToOneField(to='AuthorDetail', to_field='id', on_delete=models.CASCADE) 方式三:设置 ManyToManyField 指定手动创建第三张表

    1.1K30

    django模型动态修改参数,增加 filter 字段的方式

    CharField:字符类型,必须提供max_length参数, max_length表示字符长度 DateField:日期字段,日期格式 YYYY-MM-DD,相当于Python的datetime.date...- 必须提供max_length参数, max_length表示字符长度 TextField(Field) - 文本类型 EmailField(CharField): - 字符串类型,Django Admin...(Field) - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4Ipv6 - 参数: protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6...其它属性详情请查看:官方文档 关系字段 ForeignKey 外键类型ORM中用来表示外键关联关系,一般把ForeignKey字段设置 ‘一对多’’多’的一方。...through:使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系。

    3.8K31

    Extjs form 组件

    Ext.form.field.Date 带有日期选择器下拉框并会自动进行 日期验证日期输入表单 Ext.form.field.Number   数值型的文本表单,对非数组值行的 按键进行自动过滤,并且限定一系列...field 关联 Ext.form.Labelable 一个混合类,允许组件被配置且装饰有标签错误消息, 作为表单字段的通用组件。...'//字段的右面展示数据     重要的方法     Ext.form.field.ComboBox     控件支持自动完成、远程加载、许多其他特性。...用Text Field的regex配置应用一个校验规则,使用maskRe配置限制可输入的字符,这有一个使用TextField校验输入时间的例子        {            fieldLabel...提交之前调用了isValid方法确保每个表单字段都已经填写正确    3.最后调用submit方法,传递了两个回调函数successfailure,在这两个回调函数的参数,action.result

    2K50

    Django(14)模型中常用的属性(超详细)

    这个Field也可以使用auto_nowauto_now_add两个属性。 TimeField 时间类型。在数据库是time类型。Python是datetime.time类型。...TextField 大量的文本类型。映射到数据库是longtext类型。 UUIDField 只能存储uuid格式的字符串。uuid是一个32位的全球唯一的字符串,一般用来作为主键。...使用字符串相关的Field(CharField/TextField)的时候,官方推荐尽量不要使用这个参数,也就是保持默认值False。...因此如果再使用null=True,Django会产生两种空值的情形(NULL或者空字符串)。如果想要在表单验证的时候允许这个字符串为空,那么建议使用blank=True。...blank 标识这个字段表单验证的时候是否可以为空。默认是False。这个null是有区别的,null是一个纯数据库级别的。而blank是表单验证级别的。

    84930

    Flutter lesson 8:输入框,时间日期选择

    日期时间选择 Flutter自带的 showDatePicker showTimePicker 两个方法可以进行时间日期的选择。...使用的时候直接使用者两个方法即可,不过有一点需要注意:使用的时候,一般不要在 onPress 下直接调用,而是需要单独写一个方法。...选择时间是使用的 TimeOfDay,选择日期使用的是 DateTime ,两个是不同的方法,没有选择日期又选择时间的,或许dart.pub上面有一些第三方的插件可以。...输入框 TextField TextField 是Flutter的用户输入框,属性挺多的,不同的配置出不同的效果,就像是HTML的 input 一样。...一起使用达到最大长度时是否阻止输入 this.onChanged, //输入文本发生变化时的回调 this.onEditingComplete, //点击键盘完成按钮时触发的回调,该回调没有参数

    4.7K20

    django 字段类型_access的数据库类型是

    默认情况下,BinaryField设置editable为False,在这种情况下,他不能包含在ModelFormdjango2.1进行了修改:旧版本不允许设置editable为True。...有一个额外的可选参数:max_length,字段的最大长度,以字符为单位。最大长度django的验证使用强制执行MaxLengthValidator。...参数: auto_now:每次修改保存修改为当前日期时间,对于“最后修改的” 时间戳有用。使用Model.save()保存时有效,使用QuerySet.update() 时不会自动更新。...auto_now_add:新创建对象时自动添加当前日期时间,用于“创建时间”时使用。 auto_nowauto_now_adddefault参数是互斥的,不能同时设置。...(18) TextField 文本字段。默认表单小部件是Textarea,如果指定max_length属性,将反映在Textarea自动生成的表单字段

    3.9K30

    DjangoORM介绍字段及其参数

    但是整个软件开发过程需要特殊处理的情况应该都是很少的,否则所谓的工具也就失去了它存在的意义。 Django的ORM Django项目使用MySQL数据库 1...."HOST": "数据库IP", "POST": 3306 } } 注意:ORM不涉及数据库层面,这就需要自己手动CMD创建数据库,然后再进行配置 2....示例   app里面的models.py定义一个Person模型,包含 first_name  last_name。...- 必须提供max_length参数, max_length表示字符长度 TextField(Field) - 文本类型 EmailField(CharField...若你的表的名字是一个 SQL 保留字, 或包含 Python 变量名不允许字符--特别是字符 --没关系. Django 会自动幕后替你将列名字表名字用引号引起来。

    2.8K80

    Django项目知识点(三)

    这是一个字符串的元组或列表,没有一个字符串都是一个字段用一个可选的表明降序的'-'构成。当字段名前面没有'-'时,将默认使用升序排列。使用'?'...models.TextField   大量文本内容,HTML中表现为Textarea标签,最常用的字段类型之一!...注意:Django一个模型允许有一个自增字段,并且该字段必须为主键!...models.DateField  日期字段类型date 注意:参数auto_now=True表示每次更新都会更新这个时间;参数auto_now_add表示只是第一次创建时添加,之后的更新不再改变 models.DateTimeField...   字符串类型(正则表达式邮箱)=varchar 对字符串进行正则表达式验证使用DJango内置的EmailValidator进行邮箱地址合法性验证

    1.9K30

    python测试开发django-20.添加创建时间DateTimeField

    、DateFieldTimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三对象。...与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法程序手动为字段赋值,admin字段也会成为只读的。...需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序手动为字段赋值; 如果使用django自带的admin管理器,那么该字段...CharField是字符串类型,必须要有max_length参数,当正文的文本内容很多时,需使用TextField class Article(models.Model): '''文章'''...editable=False将导致字段不会被呈现在admin,blank=Ture表示允许表单不输入值 admin.py注册表 admin.py添加注册表的信息,然后执行下面两句,同步数据库 python

    1.2K20

    python测试开发django-20.添加创建时间DateTimeField

    、DateFieldTimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三对象。...与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法程序手动为字段赋值,admin字段也会成为只读的。...需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序手动为字段赋值; 如果使用django自带的admin管理器,那么该字段...CharField是字符串类型,必须要有max_length参数,当正文的文本内容很多时,需使用TextField class Article(models.Model): '''文章'''...editable=False将导致字段不会被呈现在admin,blank=Ture表示允许表单不输入值 admin.py注册表 admin.py添加注册表的信息,然后执行下面两句,同步数据库 python

    1K20
    领券