各位大佬:
antd版本:3.x
我在输入框的onchange事件中添加了正则表达式,去除特殊字符,在搜狗输入法中出现的时正常的结果,但在微软自带的和qq输入法都出现不同的bug。
这个是我的正则表达式,用来去除特殊字符:
e.target.value = e.target.value.replace(/[^a-zA-Z0-9\u4E00-\u9FA5]/g,'')
比如:在微软自带的输入框中文情况下,连续输入ww,输入框的内容自动变成了w'ww'wwwww(我想要的结果是两个中文)
截图如下:
在qq输入法的情况下,连续输入ww,输入框的内容自动变成了w'w(也是直接变成英文了,我想要的结果也是两个中文)
截图如下:
在使用搜狗输入法的情况下,连续输入ww,结果是正确的。
截图如下:
就很奇怪,有大佬遇到过吗?
已经解决这个问题了。
input输入框输入中文的时候有三个过程,onCompositionStart->onChange->onCompositionEnd,第一个和最后一个只会出发一次,而onChange方法会在输入值的时候一直触发,所以可以存一个变量,在onCompositionEnd只会把这个变量设为false,再进行一次正则判断,也就是onCompositionStart和onChange的时候不做正则校验,就不会有问题了。
这个是onCompositionStart和onCompositionEnd的方法。
这个是输入的时候触发的方法。
火狐浏览器的输入过程不太一样,onCompositionStart->onCompositionEnd->onChange,所以火狐浏览器不需要在onCompositionEnd之后再触发一次changeAreaName方法,因为会自动触发。