input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案

文章目录

input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案

问题描述

测试环境:react + antd input (react的事件与原生js事件不同,思路是等同的)

实现:假设该input框只允许输入数字,如果输入字符不是数字就替换为空。

1.先关闭验证,在中文输入时,输入框会显示输入的字符。通过打印发现,输入中文时onChange被触发了。

js 复制代码
<Input
     value={phone}
     onChange={(e) => {
     	cons
        setPhone(e.target.value);
     }}
     />
    <span>{phone}</span>
 </div>

2.打开验证,输入字符串时验证正常,但在输入中文时,onChange也会被触发,验证异常。

js 复制代码
const Index= () => {
  const [phone, setPhone] = useState('');
  return (
    <div>
      <Input
        value={phone}
        onChange={(e) => {
          setPhone(e.target.value.replace(/\D/g, '')); 
        }}
      />
      <span>{phone}</span>
    </div>
  );
};

解决办法 onCompositionStart与onCompositionEnd

一下两个事件的触发时机compositionstart>onchange>compositionend

  • compositionstart事件:文本合成系统(如输入法)开始新的输入合成时会触发,比如输入法开始输入中文。
  • compositionend事件:。当文本段落的组成完成或取消时, 事件将被触发,比如中文选择完成。

所以我们的思路是,在进行中文输入的时候onChange回调函数提前退出不做验证;在中文输入完成后,触发验证。

js 复制代码
const Index= () => {
  const [phone, setPhone] = useState('');
  const [flag, setFlag] = useState(false); // 识别是否正在输入中文

  return (
    <div>
      <Input
        value={phone}
        onCompositionStart={(e) => {
          setFlag(true);
        }}
        onCompositionEnd={(e) => {
          setFlag(false);
          setPhone(e.target.value.replace(/\D/g, '')); 
        }}
        onChange={(e) => {
          if(flag)setPhone(e.target.value); // 正在输入中文不验证
          else setPhone(e.target.value.replace(/\D/g, '')); 
        }}
      />
      <span>{phone}</span>
    </div>
  );
};
相关推荐
threelab21 分钟前
Three.js 咖啡杯烟雾效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
初心未改HD34 分钟前
gRPC 与 Protobuf 实战指南
开发语言·golang
Heo43 分钟前
14_React 中的更新队列 updateQueue
前端·javascript·面试
前端 贾公子1 小时前
解决浏览器端 globalThis is not defined 报错
前端·javascript·vue.js
2zcode1 小时前
基于MATLAB的交通流量预测模型设计与实现
开发语言·matlab·交通流量预测
早日退休!!!1 小时前
操作系统锁
java·开发语言
lsx2024061 小时前
Python 统计学基础与高级应用
开发语言
研究点啥好呢1 小时前
快手多模态算法工程师面试题精选:10道高频考题+答案解析
java·开发语言·人工智能·ai·面试·笔试
xxjj998a1 小时前
PHP vs C#:核心差异全解析
开发语言·c#·php
遗憾随她而去.1 小时前
Java学习(一)
java·开发语言·学习