Antd文本框TextArea复制粘贴正确的文本却触发校验

今天遇到个神奇的现象,Antd文本框,正常输入正确的文本没啥问题,但是当我从别处复制粘贴过来一段文本的时候就有问题了

在这里插入图片描述
原代码:

       <Form
          name="tmall-page"
          form={form}
          labelWrap
          autoComplete="off"
          labelCol={{ flex: '90px', offset: 0 }}
          scrollToFirstError>
          <div className="modal-form-container">
            <Form.Item
              name="tmallOrderNos"
              rules={[
                {
                  required: true,
                  message: '请输入订单号',
                },
                {
                  pattern: /^[(\r\n)(\r)(\n)A-Za-z0-9._;,-]+$/,
                  message: '只支持英文数字横杠下划线',
                },
              ]}>
              <Input.TextArea
                rows={6}
                placeholder="多个订单号请用英文逗号或换行隔开。示例:123456789,987654321"></Input.TextArea>
            </Form.Item>
          </div>
        </Form>

出现问题的原因:复制的时候,可能把零宽字符也复制上了
在这里插入图片描述
解决方法: 正则加上\u200C

修复后代码:

       <Form
          name="tmall-page"
          form={form}
          labelWrap
          autoComplete="off"
          labelCol={{ flex: '90px', offset: 0 }}
          scrollToFirstError>
          <div className="modal-form-container">
            <Form.Item
              name="tmallOrderNos"
              rules={[
                {
                  required: true,
                  message: '请输入订单号',
                },
                {
                  pattern: /^[\u200C(\r\n)(\r)(\n)A-Za-z0-9._;,-]+$/,
                  message: '支持英文数字横杠下划线',
                },
              ]}>
              <Input.TextArea
                rows={6}
                placeholder="多个订单号请用英文逗号或换行隔开。示例:123456789,987654321"></Input.TextArea>
            </Form.Item>
          </div>
        </Form>

在这里插入图片描述

### 如何在 Ant Design 的 Form 表单中配置失去焦点时触发校验 在 Ant Design 中,可以通过设置 `rules` 来控制表单项的校验行为。具体来说,在定义表单项时,可以在其对应的 `rules` 数组中指定 `{ trigger: 'onBlur' }` 或者类似的选项来实现当输入框失去焦点时触发表单项的校验逻辑。 以下是详细的说明以及代码示例: #### 使用规则中的 `trigger` 字段 通过为表单项的校验规则添加 `trigger` 参数并将其值设为 `'blur'`,可以让该字段在校验过程中仅于失焦事件发生时被触发[^1]。例如: ```jsx <Form.Item name="username" label="用户名" rules={[ { required: true, message: '请输入用户名!', trigger: 'blur', // 设置触发条件为 blur }, ]} > <Input /> </Form.Item> ``` 上述代码片段展示了如何让名为 `"username"` 的表单项在其失去焦点时执行必要的校验操作。如果未满足此规则的要求,则会显示相应的提示消息。 #### 自定义校验函数配合触发器 除了简单的必填项检查外,还可以利用自定义校验方法完成更复杂的业务需求。下面是一个例子,演示了怎样结合自定义验证逻辑与特定时刻(即离开文本域之后)启动检验过程: ```javascript const validateUsername = async (_, value) => { if (!value || !/^[a-zA-Z0-9]+$/.test(value)) { return Promise.reject(new Error('用户名只能包含字母和数字')); } return Promise.resolve(); }; <Form.Item name="customUsername" label="定制化用户名" rules={[ { validator: validateUsername, trigger: 'blur' }, // 定义自定义校验及其触发时机 ]} > <Input placeholder="支持大小写字母加阿拉伯数字组合..." /> </Form.Item> ``` 在此处,我们创建了一个异步函数用于检测用户所填写的内容是否符合预期模式,并且同样指定了它应该响应的是用户的聚焦切换动作而非其他交互形式。 #### 动态调整联动关系下的即时反馈机制 对于某些场景下存在依赖性的多个参数之间相互影响的情况——比如库存量不得低于购买数这类约束条件下——则可能需要用到动态更新关联字段的状态或者强制刷新整个表单的有效性评估状况。这时可以借助 API 提供的方法手动发起全局范围内的再审核流程: ```typescript form.setFields([ { name: ['quantity'], errors: ["采购数量不能超过当前可用库存"], }, ]); // 或者直接重新计算所有受影响部分 await form.validateFields(['pricePerUnit', 'totalAmount']); ``` 以上两种手段分别适用于不同层次的需求:前者允许单独标记某个条目存在问题;后者则是针对一组相关联的数据项目做统一处理[^3]。 --- ### 总结 综上所述,要在 Ant Design 的 Form 组件里达成因失去光标而导致立即生效的核查效果,主要依靠合理设定各独立单元格内部关于何时激活审查程序的相关属性即可轻松解决此类问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值