Phone React JS 中的数字验证 - 如何限制输入的类型和长度?

Phone number validation in React JS - how to limit type and length of input?

我正在尝试做一个简单的输入表单,它只接受总长度为 10 个字符的数字。

我在我的 JSX 中使用 maxLength 属性来限制输入长度:

<FormControl input type="tel" maxLength="10" onKeyDown={(e)=> checkInput(e)} />

这是我检查是否允许使用该键的函数(仅限数字和退格键)

const [number, setNumber] = useState()

const checkInput = (e) =>{
    if(!(e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode === 8)){
        e.preventDefault()
    }
    else{
        setNumber(e.target.value)
    }
   
}

这工作正常,除了由于 keyDown e.listener.

总是落后一击的状态

我也尝试在我的 JSX 中使用 type="number" 属性,但这不能与 max=9999999999 一起使用,也不能与 maxLength=10 属性一起使用

正确复制:e.target.value shows values one key 'behind'

onChange 解决方案:

import React from "react";
import { useState } from "react";
import { FormControl } from "react-bootstrap";

const App = () => {
  const [number, setNumber] = useState("");

  const checkInput = (e) => {
    const onlyDigits = e.target.value.replace(/\D/g, "");
    setNumber(onlyDigits);
  };

  console.log({ number });
  return (
    <div>
      <FormControl
        type="tel"
        maxLength="10"
        value={number}
        onChange={(e) => checkInput(e)}
      />
    </div>
  );
};

export default App;