[英]Prevent [a-z] from being typed on input type tel on reactJS
我有一个input type=tel
组件,我试图提供一些额外的验证并防止 [az] 被输入并粘贴到输入上。 到目前为止,我已经使用了e.key
和 prop onKeyDown
,我知道我可以阻止单个字符,但我找不到让 [az] 工作的方法。 我尝试用我在 SO 中找到的一个很好的例子,但我不知道如何得到它,尝试添加 regEx insted 但没有运气......
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 [phoneValid] = useState(["az"]);
但我后来明白道具“onKeyDown”不能那样工作......我该怎么做才能阻止输入[aA-zZ] || &&粘贴?
更新代码:
const PhoneNumberInput = ({value, onChange, valid, ...rest}) => {
if(/(^$|^\d*$)/.test(value)) {
console.log('entered value is number (or nothing i.e. empty input), do something.')
} else {
console.log('entered value is not a number - can be alphabet, space, special character, etc' )
} <------ Im getting both states fired on console independent of number or letter
return (
<Input
className={classNames('form-control ', {
'is-invalid': !valid,
})}
type="tel"
value={value}
onChange={onChange}
valid={valid}
{...rest}
/>
);
};
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}
/>
);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.