Transformer script PHP en javascript

Bonjour tout le monde !

J’ai un petit souci, j’ai fais un petit programme qui vérifie la validité de l’adresse email d’un formulaire, mais cela ne m’avantage pas du tout de la vérifier en PHP, et je souhaiterais transformer ce script en javascript, mais je ne connais pas trop, j’ai essayé mais j’ai des erreurs partout (normal en meme temps !!)


function ControleEmail( $Email )
{
  $Etat = 0;
  for( $i = 0 ; $i < strlen( $Email ) ; $i++ )
  {
    // Analyse des caracteres
 
    $Type = ' ';
    if( ($Email[$i] >= '0' && $Email[$i] <= '9') || 
        ($Email[$i] >= 'a' && $Email[$i] <= 'z') ||
        ($Email[$i] >= 'A' && $Email[$i] <= 'Z') ) $Type = 'A';
    if( $Email[$i] == '@' ) $Type = '@';
    if( $Email[$i] == '.' ) $Type = '.';
    if( $Email[$i] == '_' ) $Type = 'S';
    if( $Email[$i] == '-' ) $Type = 'S';
    
    switch( $Etat )
    {
    case 0   : // Attend un caractere alphanumeric uniquement
               if( $Type == 'A' ) $Etat = 1; else $Etat = 999; 
               break;
    case 1   : // Si caractere special caractere suivant alphanumeric uniquement
               if( $Type == 'S' ) $Etat = 0;
               // Si point special caractere suivant alphanumeric uniquement
               if( $Type == '.' ) $Etat = 0;
               // Si caractere non conforme echec
               if( $Type == ' ' ) $Etat = 999;
               // Si arobase caractere suivant alphanumeric uniquement
               if( $Type == '@' ) $Etat = 2;
               // Sinon prochain caractere libre
               break;
    case 2   : // Attend un caractere alphanumeric uniquement 
               if( $Type == 'A' ) $Etat = 3; else $Etat = 999; 
               break;
    case 3   : // Si caractere special caractere suivant alphanumeric uniquement
               if( $Type == 'S' ) $Etat = 2;
               // Si point special caractere suivant alphanumeric uniquement
               if( $Type == '.' ) $Etat = 4;
               // Si caractere non conforme echec
               if( $Type == ' ' ) $Etat = 999;
               // Si arobase caractere suivant alphanumeric uniquement
               if( $Type == '@' ) $Etat = 999;
               // Sinon prochain caractere libre
               break;
    case 4   : // Si caractere special caractere suivant alphanumeric uniquement
               if( $Type == 'A' ) $Etat = 5; else $Etat = 999; 
               break;
    case 5   : // Si caractere special caractere suivant alphanumeric uniquement
               if( $Type == 'S' ) $Etat = 2;
               // Si point special caractere suivant alphanumeric uniquement
               if( $Type == '.' ) $Etat = 4;
               // Si caractere non conforme echec
               if( $Type == ' ' ) $Etat = 999;
               // Si arobase caractere suivant alphanumeric uniquement
               if( $Type == '@' ) $Etat = 999;
               // Sinon prochain caractere libre (Validation car dernier domaine avec 2 caracteres)
               if( $Type == 'A' ) $Etat = 1000;
               break;
    case 1000: // Si caractere special caractere suivant alphanumeric uniquement
               if( $Type == 'S' ) $Etat = 2;
               // Si point special caractere suivant alphanumeric uniquement
               if( $Type == '.' ) $Etat = 4;
               // Si caractere non conforme echec
               if( $Type == ' ' ) $Etat = 999;
               // Si arobase caractere suivant alphanumeric uniquement
               if( $Type == '@' ) $Etat = 999;
               // Sinon prochain caractere libre
               break;
    }
    //echo "[".$Type."]".$Etat."<br>";
  }
  if( $Etat == 1000 ) return True;
  return False;
}

Quelqu’un peut m’aider SVP c’est super urgent.
Je vous en remercie d’avance.

Ju’

Il est fichtrement complexe ton script… un mec qui avait peur de faire des régexp?

Sinon google est ton ami : www.google.com…

Y a plein d’exemple utilisant des regexp. Par contre, il faut quand même continuer à tester niveau serveur, ce qui implique donc de “synchroniser” les deux scripts (soit via regexp soit reprendre ce script en Javascript, c’est à peu près la même syntaxe en plus)

non non il est super simple, il y a les commentaires qui prennent bcp de place, attends je te les enleve :


function ControleEmail( $Email )
{
  $Etat = 0;
  for( $i = 0 ; $i < strlen( $Email ) ; $i++ )
  {
 
    $Type = ' ';
    if( ($Email[$i] >= '0' && $Email[$i] <= '9') || 
        ($Email[$i] >= 'a' && $Email[$i] <= 'z') ||
        ($Email[$i] >= 'A' && $Email[$i] <= 'Z') ) $Type = 'A';
    if( $Email[$i] == '@' ) $Type = '@';
    if( $Email[$i] == '.' ) $Type = '.';
    if( $Email[$i] == '_' ) $Type = 'S';
    if( $Email[$i] == '-' ) $Type = 'S';
    
    switch( $Etat )
    {
    case 0   : if( $Type == 'A' ) $Etat = 1; else $Etat = 999; 
               break;
    case 1   : if( $Type == 'S' ) $Etat = 0;
               if( $Type == '.' ) $Etat = 0;
               if( $Type == ' ' ) $Etat = 999;
               if( $Type == '@' ) $Etat = 2;
               break;
    case 2   : if( $Type == 'A' ) $Etat = 3; else $Etat = 999; 
               break;
    case 3   : if( $Type == 'S' ) $Etat = 2;
               if( $Type == '.' ) $Etat = 4;
               if( $Type == ' ' ) $Etat = 999;
               if( $Type == '@' ) $Etat = 999;
               break;
    case 4   : if( $Type == 'A' ) $Etat = 5; else $Etat = 999; 
               break;
    case 5   : if( $Type == 'S' ) $Etat = 2;
               if( $Type == '.' ) $Etat = 4;
               if( $Type == ' ' ) $Etat = 999;
               if( $Type == '@' ) $Etat = 999;
               if( $Type == 'A' ) $Etat = 1000;
               break;
    case 1000: if( $Type == 'S' ) $Etat = 2;
               if( $Type == '.' ) $Etat = 4;
               if( $Type == ' ' ) $Etat = 999;
               if( $Type == '@' ) $Etat = 999;
               break;
    }
  }
  if( $Etat == 1000 ) return True;
  return False;
}
 

mieux ?

J’ai déjà cherché sur google. Si je veux quelque chose de rapide, je suis dois prendre vos services :slight_smile: sinon je peux apprendre, mais mon projet est bientot arrivé en date charnière c’est pourquoi je n’ai pas le temps, d’autant plus que je viens d’apprendre le PHP et le SQL-ODBC en 2 mois, d’où mon retard lol.

Peut on m’aider s’il vous plait ?

Je vais être gentil et te filer l’équivalent Regexp PHP de ce code (inutile de faire un automate pour ça alors que les regexp le font déjà :wink: ) :

function ControleEmail( $Email ) {
  return preg_match('/[a-z0-9_.]+@[a-z0-9_.]+(\.[a-zA-Z0-9_.]+)+/i', $Email);
}

Je ne sais pas pourquoi tu fais tes emails, mais en principe, tu devrais aussi accepter certains caractères. Et mieux :

fr.php.net…
fr.php.net…

FILTER_VALIDATE_EMAIL

filter_var($Email, FILTER_VALIDATE_EMAIL);

Ca, c’était pour PHP.

Pour Javascript,

function email_check(email) {
  return /^[a-z0-9_.]+@[a-z0-9_.]+(\.[a-zA-Z0-9_.]+)+$/i.test(email);
}

A vérifier, … (je n’utilise pas trop les regexp en JS)

haa ok merci. Je ne connaissais pas ceci.
Mais à ton avis, il vaut mieux traiter cette verification en PHP ou en JS ?


Je pense en Js car il doit vérifier avant d'envoyer le formulaire, et comment fait on pour y ajouter une alerte du genre "Votr Email est incorrect" si jamais ça retourne FAUX ?

Il prévaut toujours de faire la validation côté serveur : javascript se désactive facilement.

Oui c’est vrai tu as raison.
Et comment fasi tu pour integrer ce script à la validation du formulaire ?
pour integrer du javascript on fais ONSUBMIT=“return ma_function();” et ça marche mais en php, est ce possible ?

Tu as déjà fait des formulaires en PHP?

j’ai mon formulaire en HTML, et je le traite en PHP oui. As-tu besoin de code ?

Donc tu sais comment faire pour PHP. Tu fais une vérification avant, et t’affiche un message, en arrêtant ton processus de sauvegarde/etc

je vais voir ça merci. JE te tiens au courant. Bonne soirée