Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止在reactJS上的输入类型tel上键入[a-z]_Javascript_Html_Reactjs - Fatal编程技术网

Javascript 防止在reactJS上的输入类型tel上键入[a-z]

Javascript 防止在reactJS上的输入类型tel上键入[a-z],javascript,html,reactjs,Javascript,Html,Reactjs,我有一个input type=tel组件,我试图对它进行一些额外的验证,防止[a-z]被键入并粘贴到输入上。到目前为止,我已经使用了e.key和proponKeyDown,我知道我可以阻止单个字符,但我找不到让[a-z]工作的方法。 我正在尝试一个很好的例子,我在这里找到了,但我不知道如何得到它,尝试添加正则表达式代替,但没有运气 const PhoneNumberInput = ({value, onChange, valid, ...rest}) => { const [phoneV

我有一个
input type=tel
组件,我试图对它进行一些额外的验证,防止[a-z]被键入并粘贴到输入上。到目前为止,我已经使用了
e.key
和prop
onKeyDown
,我知道我可以阻止单个字符,但我找不到让[a-z]工作的方法。 我正在尝试一个很好的例子,我在这里找到了,但我不知道如何得到它,尝试添加正则表达式代替,但没有运气

const PhoneNumberInput = ({value, onChange, valid, ...rest}) => {

const [phoneValid] = useState(["a", "b", "c"]); <--- I added in a state what I dont want to be inputed, tried with `/[a-z]$*` but I understood that it wouldnt work... 

  return (
    <Input
      className={classNames('form-control ', {
        'is-invalid': !valid,
      })}
      type="tel"
      value={value}
      onChange={onChange}
      onKeyDown={e => phoneValid.includes(e.key) && e.preventDefault()}
      valid={valid}
      {...rest}
    />
  );
};

找到了一个非常好且干净的解决方案:

  const PhoneNumberInput = ({value, onChange, valid, ...rest}) => {
  value = value.replace(/[^0-9\+]/g, ''); <--- replace on the value 
  return (
    <Input
      className={classNames('form-control ', {
       'is-invalid': !valid,
      })}
      type="tel"
      value={value}
      onChange={onChange}
      valid={valid}
      {...rest}
    />
   );
 };
constPhoneNumberInput=({value,onChange,valid,…rest})=>{

value=value.replace(/[^0-9\+]/g,”);为什么有效字母必须处于状态?实际上它们不处于状态,这是我发现“工作”的方式React state适用于在应用程序运行期间可能更改的数据,如果更改,则需要重新渲染。您的验证标准是静态的。好的,实际上我可以为此创建函数,而无需使用useState?我会检查它!谢谢!这实际上帮助我理解!如果我输入如果输入一个数字或一个字母,我会在控制台上记录这两种状态(我刚刚编写了console.log(),输入的值前面是number,输入的值不是number)。上面的代码应该包装在
onChange
事件中。检查以获得一些基本的想法
if(/(^$|^\d*$)/.test(value)) {
 // entered value is number (or nothing i.e. empty input), do something.
} else {
 // entered value is not a number - can be alphabet, space, special character, etc 
}
  const PhoneNumberInput = ({value, onChange, valid, ...rest}) => {
  value = value.replace(/[^0-9\+]/g, ''); <--- replace on the value 
  return (
    <Input
      className={classNames('form-control ', {
       'is-invalid': !valid,
      })}
      type="tel"
      value={value}
      onChange={onChange}
      valid={valid}
      {...rest}
    />
   );
 };