dev*_*ing 8 validation twitter-bootstrap reactjs
<div className="form-group">
<label className="col-sm-0 control-label"> Name : </label>
<input
type="text"
value={this.state.UserName}
onChange={this.handleChangeUserName}
placeholder="Name"
pattern="[A-Za-z]{3}"
className="form-control"
/>
</div>
Run Code Online (Sandbox Code Playgroud)
嗨,我正在尝试使用模式验证来验证 React 中的表单输入字段。但它不起作用。我使用的验证很简单pattern="[A-Za-z]{3}".
请让我知道如何解决这个问题。将验证放在 React Bootstrap 组件中。
May*_*kla 10
您正在使用input元素的 value 属性(意味着受控组件)并更新onChange方法中的状态,因此您可以轻松地测试此正则表达式onChange并仅在输入有效时更新状态。
像这样:
handleChangeUserName(e){
if(e.target.value.match("^[a-zA-Z ]*$") != null){
this.setState({UserName: e.target.value});
}
}
Run Code Online (Sandbox Code Playgroud)
检查工作代码:
handleChangeUserName(e){
if(e.target.value.match("^[a-zA-Z ]*$") != null){
this.setState({UserName: e.target.value});
}
}
Run Code Online (Sandbox Code Playgroud)
class HelloWidget extends React.Component {
constructor(){
super();
this.state={UserName:''}
this.handleChangeUserName = this.handleChangeUserName.bind(this);
}
handleChangeUserName(e){
if(e.target.value.match("^[a-zA-Z ]*$")!=null) {
this.setState({UserName: e.target.value});
}
}
render(){
return(
<div className="form-group">
<label className="col-sm-0 control-label" htmlFor="textinput"> Name : </label>
<input type="text" value={this.state.UserName} onChange={this.handleChangeUserName} placeholder="Name" className="form-control"></input>
</div>
)
}
}
ReactDOM.render(<HelloWidget/>, document.getElementById('container'));Run Code Online (Sandbox Code Playgroud)
检查jsfiddle工作示例:https : //jsfiddle.net/uL4fj4qL/11/
勾选此jsfiddle,Material-Ui snackbar加入到显示错误,如果用户尝试输入错误的值:https://jsfiddle.net/4zqwq1fj/
pattern="[A-Za-z]{3}"是HTML5 的一项功能。
完整的解决方案在这里:https : //codepen.io/tkrotoff/pen/qypXWZ?editors=0010
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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个非常简单的 React 库来处理表单验证并支持 HTML5 属性:https : //github.com/tkrotoff/react-form-with-constraints
这里的例子:https : //github.com/tkrotoff/react-form-with-constraints/blob/master/README.md#examples
| 归档时间: |
|
| 查看次数: |
46400 次 |
| 最近记录: |