pattern="[A-Za-z]{3}"是HTML5 的一项功能。
完整的解决方案在这里:https : //codepen.io/tkrotoff/pen/qypXWZ?editors=0010
如果您只想使用默认的 HTML5 验证:
class FormValidate extends React.Component {
state = {
username: ''
};
handleUsernameChange = e => {
console.log('handleUsernameChange()');
this.setState({
username: e.target.value
});
}
handleSubmit = e => {
console.log('handleSubmit() Submit form with state:', this.state);
e.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<div className="form-group">
<label htmlFor="username">Name</label>
<input
id="username"
name="username"
value={this.state.username}
onChange={this.handleUsernameChange}
placeholder="Name"
pattern="[A-Za-z]{3}"
className="form-control" />
</div>
<button className="btn btn-primary">Submit</button>
</form>
);
}
}

class FormNoValidate extends React.Component {
state = {
username: '',
error: ''
};
handleUsernameChange = e => {
console.log('handleUsernameChange()');
const target = e.target;
this.setState({
username: target.value,
error: target.validationMessage
});
}
handleSubmit = e => {
console.log('handleSubmit() Submit form with state:', this.state);
e.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit} noValidate>
<div className="form-group">
<label htmlFor="username">Name</label>
<input
id="username"
name="username"
value={this.state.username}
onChange={this.handleUsernameChange}
placeholder="Name"
pattern="[A-Za-z]{3}"
className="form-control" />
<div className="invalid-feedback d-block">
{this.state.error}
</div>
</div>
<button className="btn btn-primary">Submit</button>
</form>
);
}
}

如果您想更进一步(更多功能、更多控制、更好的集成):
我编写了一个非常简单的 React 库来处理表单验证并支持 HTML5 属性:https : //github.com/tkrotoff/react-form-with-constraints
这里的例子:https : //github.com/tkrotoff/react-form-with-constraints/blob/master/README.md#examples