Expression régulière pour un preg_split - PHP - Programmation
Marsh Posté le 03-08-2009 à 19:45:19
En fait, pour être précis, j'ai un textarea dans lequel des clients vont saisir des adresses mails a la chaine, et je voudrais éviter le maximum de probleme...
Genre si un mec sépare par un ";", l'autre par espace etc...
Vous voyez le truc ?
Marsh Posté le 03-08-2009 à 21:01:09
le plus simple ca serait pas de définir le séparateur que tu veux utiliser, par exemple "retour chariot", et de remplacer tous les autres trucs ";", " " et "," par des "retours chariot" ensuite tout de la même manière?
Marsh Posté le 03-08-2009 à 22:17:01
c'est quoi le séparateur ideal ? retour chariot ?
c'est le "CHR(13)" ?
merci de ton aide !!
Marsh Posté le 04-08-2009 à 09:46:27
Le retour chariot est inutile et n'est pas utilisé dans un textarea (plus d'utilisation en fait... ca servait au temps des vieilles imprimantes)
Il te faut matcher les sauts de ligne "\n".
Marsh Posté le 04-08-2009 à 09:49:51
ok...merci pour ton aide...
par contre, j'ai un souci quand l'utilisateur fait plusieurs \n dans le textarea, ou plusieurs ";" etc... pas facile de gérer tous les cas !
Marsh Posté le 04-08-2009 à 10:09:16
Je te propose une autre approche.
Si c'est que des adresses mails, tu peux utiliser ereg() en passant en paramètre supplémentaire un tableau pour stocker le résultat.
Tu te fais une petite expression régulière correspondant à une adresse email standard.
Moi j'utilise celle-ci :
^[a-zA-Z.0-9_-]+@[a-zA-Z0-9_-]+[.][a-z]{1,4}$ |
Marsh Posté le 04-08-2009 à 10:16:58
oui, ce ne sont que des adresses mails...
donc si je fais :
Code :
|
il va éclater ma chaine $adresses (ce qui a été saisi dans le textarea), suivant le pattern dans $arr_adresses, c'est ça ?
et si le mec met n'importe quoi entre, il va quand réussir à extraire l'info ?
Marsh Posté le 04-08-2009 à 10:37:06
ça a l'air de fonctionner lorsqu'il n'y a qu'une seule adresse de saisie...
Marsh Posté le 04-08-2009 à 10:47:17
j'essayais avec un autre pattern...
mais mon tableau arr_adresses reste désespérément vide...
Marsh Posté le 04-08-2009 à 10:51:34
Chez moi ca fonctionne partiellement.
Avec [a-zA-Z.0-9_-]+@[a-zA-Z0-9_-]+[.][a-z]{1,4} Ca me donne la première adresse email.
Il ne faut pas les ^ ni $ car la chaine ne s'arrête pas.
Le problème, c'est que je veux toutes les adresses, pas seulement la première...
Marsh Posté le 04-08-2009 à 11:11:59
Pascal le nain a écrit : Chez moi ca fonctionne partiellement. Avec [a-zA-Z.0-9_-]+@[a-zA-Z0-9_-]+[.][a-z]{1,4} Ca me donne la première adresse email. Il ne faut pas les ^ ni $ car la chaine ne s'arrête pas. Le problème, c'est que je veux toutes les adresses, pas seulement la première... |
sauf erreur de ma part, ton truc il fonctionne pas avec des adresses mail avec sous domaines, genre nom.prenom@filiale.entreprise.com
de plus il matche pas tous les TLD: http://en.wikipedia.org/wiki/List_ [...] el_domains genre .museum ou .travel. bon d'accord c'est jamais utilisé, mais bon...
Marsh Posté le 04-08-2009 à 11:18:55
du coup, je me pose la question : est-ce possible de parser un textarea et de récupérer les mails qui vont bien ??
Marsh Posté le 04-08-2009 à 11:28:54
Oui, c'est possible, mais peut etre pas avec des expressions régulères.
Ta première solution était bonne.
Marsh Posté le 04-08-2009 à 13:11:32
un bon outil graphique pour tester ses expreg : http://gskinner.com/RegExr/
Marsh Posté le 03-08-2009 à 19:30:12
Hello tout le monde,
Je cherche à éclater une chaine de caractère dans un array suivant plusieurs critères : ";", retour chariot, espace etc...
La fonction explode ne marche que pour un critère donc je dois utiliser preg_split et les expressions régulières...
Par contre, je ne trouve pas les expression régulières pour :
- ";"
- retour chariot
- ","
- espace
Pouvez-vous m'aider ?
Merci !!