validar validacion vacios solo pattern letras formularios formulario ejemplos ejemplo crear con campos javascript node.js reactjs forms validation

validacion - validar formulario javascript html5



Reactjs-ValidaciĆ³n de entrada de formulario (4)

Debes evitar usar refs, puedes hacerlo con la función onChange .

En cada cambio, actualice el estado del campo modificado.

Luego puedes verificar fácilmente si ese campo está vacío o lo que quieras.

Puedes hacer algo como esto:

class Test extends React.Component { constructor(props){ super(props); this.state = { fields: {}, errors: {} } } handleValidation(){ let fields = this.state.fields; let errors = {}; let formIsValid = true; //Name if(!fields["name"]){ formIsValid = false; errors["name"] = "Cannot be empty"; } if(typeof fields["name"] !== "undefined"){ if(!fields["name"].match(/^[a-zA-Z]+$/)){ formIsValid = false; errors["name"] = "Only letters"; } } //Email if(!fields["email"]){ formIsValid = false; errors["email"] = "Cannot be empty"; } if(typeof fields["email"] !== "undefined"){ let lastAtPos = fields["email"].lastIndexOf(''@''); let lastDotPos = fields["email"].lastIndexOf(''.''); if (!(lastAtPos < lastDotPos && lastAtPos > 0 && fields["email"].indexOf(''@@'') == -1 && lastDotPos > 2 && (fields["email"].length - lastDotPos) > 2)) { formIsValid = false; errors["email"] = "Email is not valid"; } } this.setState({errors: errors}); return formIsValid; } contactSubmit(e){ e.preventDefault(); if(this.handleValidation()){ alert("Form submitted"); }else{ alert("Form has errors.") } } handleChange(field, e){ let fields = this.state.fields; fields[field] = e.target.value; this.setState({fields}); } render(){ return ( <div> <form name="contactform" className="contactform" onSubmit= {this.contactSubmit.bind(this)}> <div className="col-md-6"> <fieldset> <input ref="name" type="text" size="30" placeholder="Name" onChange={this.handleChange.bind(this, "name")} value={this.state.fields["name"]}/> <span style={{color: "red"}}>{this.state.errors["name"]}</span> <br/> <input refs="email" type="text" size="30" placeholder="Email" onChange={this.handleChange.bind(this, "email")} value={this.state.fields["email"]}/> <span style={{color: "red"}}>{this.state.errors["email"]}</span> <br/> <input refs="phone" type="text" size="30" placeholder="Phone" onChange={this.handleChange.bind(this, "phone")} value={this.state.fields["phone"]}/> <br/> <input refs="address" type="text" size="30" placeholder="Address" onChange={this.handleChange.bind(this, "address")} value={this.state.fields["address"]}/> <br/> </fieldset> </div> </form> </div> ) } } React.render(<Test />, document.getElementById(''container''));

En este ejemplo, hice la validación solo para correo electrónico y nombre, pero tienes una idea de cómo hacerlo. Por lo demás puedes hacerlo tú mismo.

Puede que haya una mejor manera, pero obtendrás la idea.

Aquí está el violín.

Espero que esto ayude.

Mi formulario de página de contacto es el siguiente,

<form name="contactform" onSubmit={this.contactSubmit.bind(this)}> <div className="col-md-6"> <fieldset> <input ref="name" type="text" size="30" placeholder="Name"/> <br/> <input refs="email" type="text" size="30" placeholder="Email"/> <br/> <input refs="phone" type="text" size="30" placeholder="Phone"/> <br/> <input refs="address" type="text" size="30" placeholder="Address"/> <br/> </fieldset> </div> <div className="col-md-6"> <fieldset> <textarea refs="message" cols="40" rows="20" className="comments" placeholder="Message"/> </fieldset> </div> <div className="col-md-12"> <fieldset> <button className="btn btn-lg pro" id="submit" value="Submit">Send Message</button> </fieldset> </div> </form>

Necesidad de agregar validación para todos los campos. ¿Puede alguien ayudarme a agregar validación en este formulario de reacción?


Puede ser tarde para responder: si no desea modificar mucho su código actual y aún puede tener un código de validación similar en todo su proyecto, también puede probar este: https://github.com/vishalvisd/react-validator .


Tomé su código y lo adapté con la biblioteca react-form-with-constraints : https://codepen.io/tkrotoff/pen/LLraZp

const { FormWithConstraints, FieldFeedbacks, FieldFeedback } = ReactFormWithConstraints; class Form extends React.Component { handleChange = e => { this.form.validateFields(e.target); } contactSubmit = e => { e.preventDefault(); this.form.validateFields(); if (!this.form.isValid()) { console.log(''form is invalid: do not submit''); } else { console.log(''form is valid: submit''); } } render() { return ( <FormWithConstraints ref={form => this.form = form} onSubmit={this.contactSubmit} noValidate> <div className="col-md-6"> <input name="name" size="30" placeholder="Name" required onChange={this.handleChange} className="form-control" /> <FieldFeedbacks for="name"> <FieldFeedback when="*" /> </FieldFeedbacks> <input type="email" name="email" size="30" placeholder="Email" required onChange={this.handleChange} className="form-control" /> <FieldFeedbacks for="email"> <FieldFeedback when="*" /> </FieldFeedbacks> <input name="phone" size="30" placeholder="Phone" required onChange={this.handleChange} className="form-control" /> <FieldFeedbacks for="phone"> <FieldFeedback when="*" /> </FieldFeedbacks> <input name="address" size="30" placeholder="Address" required onChange={this.handleChange} className="form-control" /> <FieldFeedbacks for="address"> <FieldFeedback when="*" /> </FieldFeedbacks> </div> <div className="col-md-6"> <textarea name="comments" cols="40" rows="20" placeholder="Message" required minLength={5} maxLength={50} onChange={this.handleChange} className="form-control" /> <FieldFeedbacks for="comments"> <FieldFeedback when="*" /> </FieldFeedbacks> </div> <div className="col-md-12"> <button className="btn btn-lg btn-primary">Send Message</button> </div> </FormWithConstraints> ); } }

Captura de pantalla:

Este es un hack rápido. Para obtener una demostración adecuada, consulte https://github.com/tkrotoff/react-form-with-constraints#examples


import React from ''react''; import {sendFormData} from ''../services/''; class Signup extends React.Component{ constructor(props){ super(props); this.state = { isDisabled:true } this.submitForm = this.submitForm.bind(this); } validateEmail(email){ const pattern = /[a-zA-Z0-9]+[/.]?([a-zA-Z0-9]+)?[/@][a-z]{3,9}[/.][a-z]{2,5}/g; const result = pattern.test(email); if(result===true){ this.setState({ emailError:false, email:email }) } else{ this.setState({ emailError:true }) } } handleChange(e){ const target = e.target; const value = target.type === ''checkbox'' ? target.checked : target.value; const name = target.name; this.setState({ [name]: value }); if(e.target.name===''firstname''){ if(e.target.value==='''' || e.target.value===null ){ this.setState({ firstnameError:true }) } else { this.setState({ firstnameError:false, firstName:e.target.value }) } } if(e.target.name===''lastname''){ if(e.target.value==='''' || e.target.value===null){ this.setState({ lastnameError:true }) } else { this.setState({ lastnameError:false, lastName:e.target.value }) } } if(e.target.name===''email''){ this.validateEmail(e.target.value); } if(e.target.name===''password''){ if(e.target.value==='''' || e.target.value===null){ this.setState({ passwordError:true }) } else { this.setState({ passwordError:false, password:e.target.value }) } } if(this.state.firstnameError===false && this.state.lastnameError===false && this.state.emailError===false && this.state.passwordError===false){ this.setState({ isDisabled:false }) } } submitForm(e){ e.preventDefault(); const data = { firstName: this.state.firstName, lastName: this.state.lastName, email: this.state.email, password: this.state.password } sendFormData(data).then(res=>{ if(res.status===200){ alert(res.data); this.props.history.push(''/''); }else{ } }); } render(){ return( <div className="container"> <div className="card card-login mx-auto mt-5"> <div className="card-header">Register here</div> <div className="card-body"> <form id="signup-form"> <div className="form-group"> <div className="form-label-group"> <input type="text" id="firstname" name="firstname" className="form-control" placeholder="Enter firstname" onChange={(e)=>{this.handleChange(e)}} /> <label htmlFor="firstname">firstname</label> {this.state.firstnameError ? <span style={{color: "red"}}>Please Enter some value</span> : ''''} </div> </div> <div className="form-group"> <div className="form-label-group"> <input type="text" id="lastname" name="lastname" className="form-control" placeholder="Enter lastname" onChange={(e)=>{this.handleChange(e)}} /> <label htmlFor="lastname">lastname</label> {this.state.lastnameError ? <span style={{color: "red"}}>Please Enter some value</span> : ''''} </div> </div> <div className="form-group"> <div className="form-label-group"> <input type="email" id="email" name="email" className="form-control" placeholder="Enter your email" onChange={(e)=>{this.handleChange(e)}} /> <label htmlFor="email">email</label> {this.state.emailError ? <span style={{color: "red"}}>Please Enter valid email address</span> : ''''} </div> </div> <div className="form-group"> <div className="form-label-group"> <input type="password" id="password" name="password" className="form-control" placeholder="Password" onChange={(e)=>{this.handleChange(e)}} /> <label htmlFor="password">Password</label> {this.state.passwordError ? <span style={{color: "red"}}>Please enter some value</span> : ''''} </div> </div> <button className="btn btn-primary btn-block" disabled={this.state.isDisabled} onClick={this.submitForm}>Signup</button> </form> </div> </div> </div> ); } } export default Signup;