Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/09/2006, 11h52   #1
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Par défaut Syntaxe fonction ereg()

Bonjour

Dans des chaînes ($articles), j'ai des dates au format (m-Y)
Exemple :
02-2006

Si j'utilise la fonction de cette façon :

Code :
1
2
3
4
5
6
7
 
 
if(ereg("($annee)",$article))
 
ou même
 
if(ereg("$mois",$article))
C'est ok !

En revanche, en rajoutant le séparateur (-)
Code :
1
2
3

if(ereg("($mois)-($annee)",$article))
Je n'ai pas de réponse, est-ce que cette dernière syntaxe est erronée svp?
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 15h17   #2
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Salut,

tu peux tenter :

if(ereg("$mois-$annee",$article)) {

Si c'est juste pour faire ce test, tu peux utiliser strstr().
Bye
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 15h32   #3
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par Djakisback
tu peux tenter :

if(ereg("$mois-$annee",$article)) {
Salut

J'avais déjà testé cette syntaxe et c'est également resté sans réponse.
Et pourtant, dans mes chaines de caractéres, il y a bien des dates à ce format (mois-annee).
(?)
Pas facile "d'apprivoiser" toutes les ficelles des regex.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 15h35   #4
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Si tu veux juste vérifier la présence du tiret, un strpos() sera plus rapide.
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 15h37   #5
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Ceci fonctionne très bien :

Code :
1
2
3
4
5
6
$article = "ezrzerze02-2001zerzerzer";
$mois = "02";
$annee = "2001";
if(ereg("$mois-$annee",$article))	{
	echo 'ok';
}

Pour vérifier qu'un mois est valide c'est plutôt :
([0-9]{1,2})
car
([0-9]{2})
te match aussi des mois supérieur à 12
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 15h41   #6
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
En fait, comme je l'ai précisé au début, si je fais des tests indépendants comme ceci :

Code :
1
2
3
if(ereg("($annee)",$article))
ou 
if(ereg("$mois",$article))
J'ai bien le retour

C'est ce fameux séparateur (-) qui semble poser probléme

EDIT : Djakisback, j'avais pas vu ta réponse, je vais tester.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 17h14   #7
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Citation:
Envoyé par Djakisback
Pour vérifier qu'un mois est valide c'est plutôt :
([0-9]{1,2})
car
([0-9]{2})
te match aussi des mois supérieur à 12
([0-9]{1,2}) match aussi 99 ou meme 00 ;o)

si tu veux vraiment restreindre a 1-12, c'est un peu plus sioux :

match uniquement :
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 01, 02, 03, 04, 05, 06, 07, 08, 09
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 17h21   #8
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
En effet, sry
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 17h32   #9
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par Djakisback
Ceci fonctionne très bien :

Code :
1
2
3
4
5
6
$article = "ezrzerze02-2001zerzerzer";
$mois = "02";
$annee = "2001";
if(ereg("$mois-$annee",$article))	{
	echo 'ok';
}
De cette façon, c'est trés permitieux, la preuve :

exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
$article = "ezrzerze 11-02-2001 zerzerzer";
$jour= "1";
$mois = "02";
$annee = "2001";
if(ereg("$jour-$mois-$annee",$article))	{
	print("ok<br>");
}
else
{
print("Dans les choux<br>");
}
Et il répond ok !...hum !

Sinon Fladnag, la syntaxe compléte donnerait quoi stp ?
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 17h59   #10
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
hum, en gros tu cherches a savoir si une date DETERMINEE est présente dans un article ??

ca revient a verifier qu'une chaine est dans une autre.

donc :

Code :
1
2
3
4
$jour = 1;
$mois = 10;
 
if (strpos($article, "$jour-$mois")!== FALSE)
fonctionnerais tres bien

maintenant, si tu ne veux pas matcher 11-10 quand tu recherche 1-10, tu a raison d'utiliser des expressions régulieres, qui devient alors :

Code :
ereg("[^0-9]$jour-$mois[^0-9]", $article);
et si ca ne marche pas, essaye :

Code :
ereg("[^0-9]$jour\-$mois[^0-9]", $article);
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 18h15   #11
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Bon, l'un ou l'autre regex déclenche un parse error.
Pas évident quand on est pas familier de ces syntaxes.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 19h26   #12
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Tes dates sont sous quelle forme ?
01-02-2001
ou
1-02-2001
ou les deux ?

Si elles sont seulement de la première tu peux utiliser :
Code :
strpos($article, "$jour-$mois-$annee")
Pour le code de Fladnag c'est :
Code :
ereg("[^0-9]".$jour."-".$mois."[^0-9]", $article)
sinon il fait la soustraction mais ca ne fonctionne pas pour tout, c'est pour ca qu'il faudrait connaître le format de tes dates, sinon il faut faire un motif un peu plus complexe.
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 19h46   #13
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Dans l'exemple ci-dessous, il n' y a pas de 0 au début du jour, ce qui pourrait être effectivement générateur d'erreur ou de conflit, et pourtant la réponse est erronée :

Exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$article = "ezrzerze 11-02-2001 zerzerzer";
$jour= "1";
$mois = "02";
$annee = "2001";
if (strpos($article, "$jour-$mois-$annee")){
	print("ok<br>");
}
else
{
print("Dans les choux<br>");
}
Réponse : ok !
grrrrrrrr !
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 19h50   #14
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
L'important c'est de savoir si elles sont toujours formatées :
DD/MM/YYYY
et non
D/MM/YYYY
ou
D/M/YYYY
etc.

Si c'est le cas il faut que tu recherches :

$jour ="01" et non $jour = "1"

et c'est bon avec strpos().
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 20h02   #15
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
C'est comme dans le dernier exemple :

(d-m-Y)
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 20h02   #16
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Citation:
Envoyé par alain31tl
C'est ce fameux séparateur (-) qui semble poser probléme
Et avec l'échappement devant le - ?

Code :
if(ereg("($mois)\-($annee)",$article))
webrider
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 20h12   #17
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Ok donc si tu es sure que tu as tjrs 2 caractères pour les jours et les mois, il faut que tu fasses tes tests sur 2 caractères, comme déjà précisé au-dessus :

Code :
1
2
3
4
5
6
7
8
9
10
$jour= "01";
$mois = "02";
$annee = "2001";
if (strpos($article, "$jour-$mois-$annee")){
	print("ok<br>");
}
else
{
print("Dans les choux<br>");
}
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 20h23   #18
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
en fait la question c'est de savoir si tu *connait* les dates que tu cherches avant => strpos
ou si tu ne les connait pas et tu cherches a récuperer/verifier toutes les dates de l'article => ereg ou preg
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 21h00   #19
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par Fladnag
en fait la question c'est de savoir si tu *connait* les dates que tu cherches avant => strpos
ou si tu ne les connait pas et tu cherches a récuperer/verifier toutes les dates de l'article => ereg ou preg
Dans chaque article, il y a des dates au format ( 08-12-2006 pour l'exemple).
Je récupére donc la variable $article dans mes tables pour la traiter.
L'objectif est de comparer la date qui figure dans cette chaîne à une autre, tel que c'est construit dans les récents exemples.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 23h15   #20
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
ok, donc si tu connais la date recherchée, strpos suffit.

Si tu sais également un peu plus de choses (par exemple que la date est précédé d'un espace ou d'un caractere deux points) tu peux aussi faire quelque chose du genre :

Code :
if (strpos($article, " $jour-$mois-$annee")!== FALSE) {
ou
Code :
if (strpos($article, ":$jour-$mois-$annee")!== FALSE) {
si ca ne fonctionne pas, verifie bien que c'est ces caracteres là que tu as dans $article, en faisant par exemple :

Code :
var_dump(htmlspecialchars($article));
ca va t'afficher exactement ce qu'il contient. Ca te permettra de detecter les eventuels espaces entre les tirets, les caracteres spéciaux, les balises html non prévues, etc...
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h04.


 
 
 
 
Partenaires

Hébergement Web