2017-02-06 6 views
0

I "m versuchen, Passwort-Feld zu validieren eine Warnung angezeigt wird, wenn die ValidierungWie validieren jsx reagiert

Hier ist nicht, was ich bisher ausprobiert habe, aber es funktioniert nicht. Jede Hilfe wird sehr geschätzt.

class PasswordForm extends React.Component { 
constructor(props) { 
super(props); 
this.state = {value: ''}; 

this.handleChange = this.handleChange.bind(this); 
this.handleSubmit = this.handleSubmit.bind(this); 
} 

handleChange(event) { 
this.setState({value: event.target.value}); 
} 

validate(event) { 
var pass = event.target.value; 
var reg = '/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,32}$/'; 
var test = reg.test(pass); 
if (test) { 
    alert('pass'); 
}else{ 
    alert('fail'); 
} 
} 

handleSubmit(event) { 
if(this.state.value.length < 8) { 
    return false; 
} 

alert('A password was submitted that was ' + this.state.value.length + ' characters long.'); 
event.preventDefault(); 
} 

render() { 
return (
    <form onSubmit={this.handleSubmit}> 
    <label> 
     Password:&nbsp; 
     <input type="password" value={this.state.value} onChange={this.handleChange} onInput={this.validate}/> 
    </label> 
    <input type="submit" value="Submit" /> 
    </form> 
); 
} 
} 

ReactDOM.render(
<PasswordForm />, 
document.getElementById('root') 
); 

Was ich will, ist, wenn der Benutzer auf ein Warnfeld erscheint klickt einreichen, wenn die Validierung fehlschlägt.

+0

gibt es ein gutes Plugin für Validierungsarbeiten https://www.npmjs.com/package/validator –

+0

Danke, aber ich möchte wirklich wissen, wie es auf eigene Faust zu tun . Deshalb ist es nur ein Feld. –

+0

'validate()' Methode wurde nicht im Konstruktor –

Antwort

0

Nicht sicher die regex Sie verwendet wird, verwendet, um eine einfache, die upper case characters nur akzeptieren. Sie sind bereits Verwendung der onChange Verfahren, so dass ein separater method für validation Verwendung nicht erforderlich ist, verwenden Sie diese onChange Methode, die zuerst überprüft, ob pass gültig ist oder nicht, dann setzen nur den state Wert:

handleChange(event) { 
     var pass = event.target.value; 
     var reg = /^[A-Z]*$/; 
     var test = reg.test(pass); 
     if (test) { 
      alert('pass'); 
      this.setState({value: pass}); 
     }else{ 
     alert('fail'); 
     }   
    } 

prüfen diese jsfiddle: https://jsfiddle.net/6q53prks/

Lassen Sie mich wissen, wenn Sie Hilfe benötigen.

+0

gebunden Die von Ihnen bereitgestellte jsfiddle funktioniert nicht. – Hosar

+0

@Hosar was ist der Fehler darin? Könnten Sie bitte angeben, welcher Teil nicht funktioniert? es funktioniert für mich, wie ich –

0

vielleicht dieses https://codepen.io/dagman/pen/wgXRyZ

class PasswordForm extends React.Component { 
    constructor(props) { 
    super(props); 

    this.state = {value: ''}; 

    this.handleChange = this.handleChange.bind(this); 
    this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    handleChange(event) { 
     this.setState({ 
      value: event.target.value 
     }); 
    } 

    handleSubmit(event) { 
     event.preventDefault(); 

     const { value } = this.state; 
     const re = new RegExp("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,32}$"); 
     const isOk = re.test(value); 

     console.log(isOk); 

     if(!isOk) { 
      return alert('weak!'); 
     } 

     alert('A password was submitted that was ' + value.length + ' characters long.'); 
    } 

    render() { 
     return (
      <form onSubmit={this.handleSubmit}> 
       <label> 
        Password:&nbsp; 
        <input type="password" value={this.state.value} onChange={this.handleChange} /> 
       </label> 
       <input type="submit" value="Submit" /> 
      </form> 
     ); 
    } 
} 

ReactDOM.render(
    <PasswordForm />, 
    document.getElementById('root') 
); 
+0

erwarte, könnten Sie einen beliebigen Eingabewert, der nicht zu schwach ergeben ?? weil ich viele benutzte, aber nicht Erfolg, versuchte ich dies auch: Abcd # 12345 * 12 $ QWER –

+0

reparierte es, sollte jetzt arbeiten –