reactjs - Material UI kullanarak kullanıcıların TextField'e harf girmesini nasıl engellerim
Kullanıcının yalnızca pozitif rakam girebileceği bazı TextField'larım var. Şu anda bunu onKeyDown üzerinde yapıyorum:
<TextField
label={distanceError}
error={!!distanceError}
defaultValue={kpoints.distance}
onBlur={handleDistanceChange}
**onKeyDown={(evt) =>
['+', '-'].includes(evt.key) && evt.preventDefault()
}**
InputLabelProps={{
shrink: true,
}}
inputProps={{
min: 0,
id: 'distance-input',
style: {textAlign: 'center'},
}}
variant="outlined"
size="small"
type="number"
aria-label="Distance in angstroms input"
></TextField>
Bu, kullanıcıların negatif sayı girmesini istemediğim için herhangi bir özel karakteri engeller.
Kullanıcının a-z harflerini girmesini önlemek için buna ne ekleyebilirim?
Ayrıca kullanıcı farklı bir sayı girdiğinde sayının bir stringe dönüştürülmesini de önlemem gerekiyor.
Lütfen yardım edin!
Cevap #1
Veya bunu kullanabilirsiniz. Çünkü diğerleri sadece isNaN kullandıklarında eslint'te hata alabilecekleri AirBnB kılavuzunu kullanıyor.
<TextField
value={value}
variant="outlined"
onChange={(event) => {
setValue(!Number.isNaN(Number(event.target.value)) ? event.target.value : value);
}}
size="small"
/>
Cevap #2
Bir TextField'den (veya input) gelen girdiler her zaman string olarak kabul edilir. Değerin NaN olup olmadığını yardımcı bir fonksiyonla kontrol edebilirsiniz:
const check = (input) => {
if (isNaN(input)) {
return false;
} else {
return Number(input);
}
};
Eğer value bir sayıya dönüştürülemeyen bir string ise false döner, aksi takdirde yeni durumunuz olarak ayarlayabileceğiniz bir tamsayı değeri döner.
Güncelleme: bunu dene:
<TextField
value={value}
variant="outlined"
onChange={(event) => {
setValue(!isNaN(event.target.value) ? event.target.value : "");
}}
size="small"
/>
