controle chaine caractere

Répondre
debe
le 14/05/2009 à 10:36
debe
bonjour,
j'ai un champ "textarea" dans lequel je demande aux internautes de remplir des adresses mel afin de recommander mon sites à leurs amis, en les séparant par une virgule.
je sais envoyer le mail à toute la liste car séparé par une virgule, cela marche

mais je voudrais contrôler
1) l'adresse email
2) que la séparation est bien une virgule

j'ai trouvé cette fonction
<?php
function extraireMotsDUnePhrase($phrase)
{
/* caractères que l'on va remplacer (tout ce qui sépare les mots, en fait) */
$aremplacer = array(",",".",";",":","!","?","(",")","[","]","{","}",""","'"," ");
/* ... on va les remplacer par un espace, il n'y aura donc plus dans $phrase que des mots et des espaces */
$enremplacement = " ";

/* on fait le remplacement (comme dit ci-avant), puis on supprime les espaces de début et de fin de chaîne (trim) */
$sansponctuation = trim(str_replace($aremplacer, $enremplacement, $phrase));

/* on coupe la chaîne en fonction d'un séparateur, et chaque élément est une valeur d'un tableau */
$separateur = "[ ]+"; // 1 ou plusieurs espaces
$mots = split($separateur, $sansponctuation);

return $mots;
}
?>

mais cela me renvoie tous les mots, comment séparer chacun de ces mot pour les tester ?
debe
LA GLOBULE
le 14/05/2009 à 10:51
LA GLOBULE
Normalement $mots est un tableau, donc tu devrais pourvoir 'lire' chaque mot, un par un.

Par contre, à mon avis, tu te compliques la vie pour tester tes emails.
debe
le 14/05/2009 à 10:55
debe
Par contre, à mon avis, tu te compliques la vie pour tester tes emails.

peux tu me mettre sur un piste sur le pourquoi je me complique ?
le champ va me renvoyer des adresses séparées par une virgule, peux être avec un espace entre chaque ou pas (cela dépend d'une personne, d'ou risque d'erreurs.

comment procèderais-tu ?
debe
LA GLOBULE
le 14/05/2009 à 13:15
LA GLOBULE
Si ton séparateur est la virgule, je ferais direct un explode dessus, sans rien remplacer.
Ensuite, je valide ou non ce que je trouve entre les virgules.
debe
le 14/05/2009 à 17:33
debe
désolé de revenir à la charge, mais j'ai un autre souci sur mon test
http://www.cyberacteurs.org/test/
<?php
include_once('../fonctions/verifmail.inc.php');

$mel = $_POST['mel6'];
$mel2 = explode(",", $mel);
for($i=0;$i<sizeof($mel2);$i++) // tant que $i est inferieur au nombre d'éléments du tableau...
{

if (verifmail ($mel2[$i]) == '1')
{
echo $mel2[$i];
echo " l'adresse est ok<p>";
}
else
{
echo $mel2[$i];
echo " l'adresse n'st pas bonne<p>";
}
}
?>


si il n'y a pas de virgule à la fin de ma chaine, la dernière adresse est testée comme mauvaise

Or, les personnes risquent de ne pas mettre cette virgule de fin
debe
LupusMic
le 14/05/2009 à 20:42
LupusMic
Pourquoi mettre une virgule à la fin ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
debe
le 14/05/2009 à 22:20
debe
comme je le disais, si il n'y a pas de virgule à la fin de ma chaine, la dernière adresse est testée comme mauvaise

je ne veux pas forcément en mettre, juste pouvoir tester mes adresses
debe
LA GLOBULE
le 15/05/2009 à 08:36
LA GLOBULE
Ce n'est pas logique ce que tu nous dis. Le problème doit venir d'ailleurs.

En effet, explode découpe en "intervalle".

Exemple :

<?php
$str = 'frfr,dsd,zaeza';

print_r(explode(',', $str));
?>


Affichera :

Array
(
[0] => frfr
[1] => dsd
[2] => zaeza
)


Donc il n'y a pas besoin de virgule à la fin pour tout récupérer.

Pour comprendre ce qu'il se passe, il faudrait voir deux choses :
- le contenu exact du dernier élément du tableau (pas juste un echo, le mieux serait carrément d'écrire cette valeur dans un fichier histoire de voir si il n'y a pas des retours chariots ou des caractères Z)
- le code de la fonction qui vérifie les mails
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours