Exercice 10.8 Terminé

Consigne

Ecrire un algorithme qui supprime dans notre carnet d'adresses tous les individus dont le mail est invalide (pour employer un critère simple, on considèrera que sont invalides les mails ne comportant aucune arobase, ou plus d'une arobase).

Afficher le fichier du carnet d'adresses

Pseudo code

DEBUT
    OUVRIR "address.txt" sur 1 en LECTURE

    i = 0
    users = []
    badMailCount = 0

    TANT QUE non EOF, 1
        line = LIRE 1
        
        mail = str_replace( " ", "", substr(line, 60, 20) )

        SI ( !filter_var(mail, FILTER_VALIDATE_EMAIL) ) ALORS
            badMailCount++
        SINON
            users[i] = line
        FIN SI

        i++
    FIN TANT QUE

    FERMER FICHIER 1

    SI (badMailCount > 0) ALORS
        OUVRIR "address.txt" sur 1 en ECRITURE

        POUR CHAQUE users EN user
            ECRIRE 1, user
        FIN POUR
        
        ECRIRE badMailCount . " utilisateur(s) supprimé(s) du carnet d'adresse (mauvais email)."
    SINON
        ECRIRE "Les adresses mails de tous les utilisateurs semblent correctes."
    FIN SI

FIN

Réponse

• Fonctionnement fonction filter_var():
    https://www.php.net/manual/fr/function.filter-var
• Liste des filtres disponibles:
    https://www.php.net/manual/fr/filter.filters.validate.php

Conversion

Pas de code Javascript présent pour cet exercice
Pas de code Jquery présent pour cet exercice
<?php

/**
 * @var String $filePath Path of address.txt file
 */
$filePath = "scripts/175/address.txt";

// Open file in writing mode, cursor at the end of file.
$fStream = fopen($filePath, "r");

if ($fStream) {

    $i = 0;
    $users = [];
    $badMailCount = 0;

    while (!feof($fStream)) {
        $line = fgets($fStream);

        $mail = str_replace(" ", "", substr($line, 60, 20) );

        if ( !filter_var($mail, FILTER_VALIDATE_EMAIL) ) {
            $badMailCount++;
        } else {
            $users[$i] = $line;
        }

        $i++;
    }

    fclose($fStream);

    if ($badMailCount > 0) {
        $fStream = fopen($filePath, "w");

        foreach ($users as $user) {
            fwrite($fStream, $user);
        }

        echo $badMailCount . " utilisateur(s) supprimé(s) du carnet d'adresse (mauvais email).";
    } else {
        echo "Les adresses mails de tous les utilisateurs semblent correctes.";
    }
}

Choisissez un language:

Entrez les valeurs nécessaires:

Résultat du code

Le résultat s'affichera après l'exécution du code.