验证 React 中的表单输入字段

dev*_*ing 8 validation twitter-bootstrap reactjs

<div className="form-group">
  <label className="col-sm-0 control-label"> Name : &nbsp; </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 : &nbsp; </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/

勾选此jsfiddleMaterial-Ui snackbar加入到显示错误,如果用户尝试输入错误的值:https://jsfiddle.net/4zqwq1fj/


tan*_*y_k 6

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>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

无效的输入 FormValidate

如果您想更好地与Bootstrap 4集成:

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)

无效的输入 FormNoValidate

如果您想更进一步(更多功能、更多控制、更好的集成):

我编写了一个非常简单的 React 库来处理表单验证并支持 HTML5 属性:https : //github.com/tkrotoff/react-form-with-constraints

这里的例子:https : //github.com/tkrotoff/react-form-with-constraints/blob/master/README.md#examples