export default () => {
const [value, setValue] = useState(null);
const [start, setStart] = useState(0);
const [key, setKey] = useState(null);
useEffect(()=>{
inputRef.current.selectionStart = start;
inputRef.current.selectionEnd = start;
}, [start, value])
return (
<input
ref={inputRef}
value={value}
onKeyDown={(e)=>{
if(e.key === 'Backspace'){
setKey('Backspace')
setStart(e.target.selectionStart);
}
}}
onChange={(e) =>{
let value = e.target.value;
let start = e.target.selectionStart;
if(key === 'Backspace' && start === 3){
value = value.replace(/[^\d]/g,'').replace(/\s*/g,"").slice(0, 11)
value = `${value.slice(0,2)}${value.slice(3,4)} ${value.slice(4, 8)} ${value.slice(8, value.length)}`
setValue(value);
setStart(2)
return
}
if(key === 'Backspace' && start === 8){
value = value.replace(/[^\d]/g,'').replace(/\s*/g,"").slice(0, 11)
value = `${value.slice(0,3)} ${value.slice(3, 6)}${value.slice(7, 8)} ${value.slice(8, value.length)}`
setValue(value);
setStart(7)
return
}
value = value.replace(/[^\d]/g,'').replace(/\s*/g,"").slice(0, 11);
if(value.length >= 7 && value.length < 12){
value = `${value.slice(0, 3)} ${value.slice(3, 7)} ${value.slice(7, 11)}`;
}
if(value.length === 7){
value = `${value.slice(0, 3)} ${value.slice(3, 7)} `;
}
if(value.length > 3 && value.length < 7){
value = `${value.slice(0, 3)} ${value.slice(3, 7)}`;
}
if(value.length === 3){
value = `${value.slice(0, 3)} `;
}
if(start < 3){
setStart(start)
}
if(start === 3){
setStart(start + 1)
}
if(start > 3 && start < 8){
setStart(start)
}
if(start === 8 ){
setStart(start + 1)
}
if( start > 8) {
setStart(start)
}
if(start >= 13){
setStart(13)
}
setValue(value)
setKey(null)
}}
/>
)
}
自己封装一个手机号344格式输入框
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 项目中很多地方,使用到了自定义控件。 简单点的,如个性控件的定制,多个组件的组合封装等。我们需要了解自定义控件的基...
- PhoneTextWatcher 手机号格式化监听器,支持普通输入/删除,中间输入/删除,在任意位置下黏贴/剪贴多...
- 跪求关注,最近准备离职,想把博客撑上去好找工作,不求喜欢,求关注,谢谢了 最近整理一下之前的代码,实现高度封装和复...
- 前端Vue自定义注册界面模版 手机号邮箱账号输入框 验证码输入框 包含手机号邮箱账号验证 , 下载完整代码请访问u...