Предполагая, что вы используете управляемый ввод, вот как вы можете это сделать.
Мы будем использовать replace
с регулярным выражением, которое допускает только цифры. Если вам не нужна поддержка IE, вы можете пропустить это и просто положиться на type="number"
.
Тогда мы будем использовать slice
с начальной позицией 0 и концом 8, так как вы хотите ограничить до 8 цифр. Если вам нужно что-то отличное от 8, просто измените это число.
class Example extends React.Component {
state = {
value: ''
}
onChange = e => {
// Separated into 3 steps for clarity
let onlyNumbers = e.target.value.replace(/[^\d]/g, '');
let limitToEight = onlyNumbers.slice(0, 8);
this.setState({ value: limitToEight });
// In one line:
// this.setState({ value: e.target.value.replace(/[^\d]/g, '').slice(0, 8) })
}
render() {
return <input type='number' value={this.state.value} onChange={this.onChange} />
}
}
ReactDOM.render(<Example />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root" />