web-dev-qa-db-fra.com

Validation du courrier électronique (React Native). Renvoyer le résultat comme 'invalide' pour toutes les entrées

J'essaie de valider le courrier électronique d'un utilisateur en le comparant à une expression. Mais le résultat obtenu est invalide pour toutes les entrées. 

CODE MIS À JOUR

class dummytest extends Component{

  constructor(props){
    super(props);
    this.state = {
                email :'',
                validated: false ,
                 }
  };

go = () => {
           const reg = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
           if (reg.test(this.state.email) === true){
               alert( valid);
           }
           else{
               alert();
           }
 }
  render(){
       return(
         <View style={{alignSelf:'center',marginTop:100}}>
              <TextInput autoCapitalize="none" autoCorrect={false} style={{height:20,width:200,backgroundColor:'blue'}} value={this.setState.email}/>

              <Button onPress={this.go.bind(this)}>
                 <Text> GO </Text>
              </Button>
          </View>

       );
    }
}
5
Avikrit Khati

Ok, j'ai le code qui fonctionne, ci-dessous, vous pouvez jeter un œil à la validation de l'email sur chaque entrée d'utilisateur.

  1. Votre partie de fonction: 

    validate = (text) => {
    console.log(text);
    let reg = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ ;
    if(reg.test(text) === false)
    {
    console.log("Email is Not Correct");
    this.setState({email:text})
    return false;
      }
    else {
      this.setState({email:text})
      console.log("Email is Correct");
    }
    }
    
  2. Votre composant TextInput: 

        <TextInput
          placeholder="Email ID"
          onChangeText={(text) => this.validate(text)}
          value={this.state.email}
        />
    
20
Neel Gala

Ressemble à une erreur de syntaxe. Vous avez une fonction imbriquée appelée validate directement dans la définition de go.

En règle générale, je vous suggérerais de conserver l'indentation et les accolades cohérentes pour que ce type d'erreur soit détectable en un coup d'œil - lorsque les crochets ne sont pas alignés, il y a un problème.

Ensuite, vous pouvez faire plusieurs choses pour que ce code fonctionne:

  • Supprimez la ligne validate (email) ainsi que son support fermé
  • Courriel de référence via this.state.email in go
  • Ajoutez une variable d'état supplémentaire pour indiquer si l'e-mail a été validé ou non.

Quelque chose comme: 

this.state = {
 email :'',
 validated : false,
}

Et...

go = () => {  
        if (this.state.email.test(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/)==0) {
            this.setState({ validated : true });
        } else {
            this.setState({ validated : false });
        }
    }
1
jaws