IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Syntaxe fonction ereg() [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,

    tu peux tenter :

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

    Si c'est juste pour faire ce test, tu peux utiliser strstr().
    Bye
    Vive les roues en pierre

  3. #3
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    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.

  4. #4
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    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.

  5. #5
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Ceci fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Vive les roues en pierre

  6. #6
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    En fait, comme je l'ai précisé au début, si je fais des tests indépendants comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    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

  8. #8
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    En effet, sry
    Vive les roues en pierre

  9. #9
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par Djakisback
    Ceci fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ereg("[^0-9]$jour-$mois[^0-9]", $article);
    et si ca ne marche pas, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ereg("[^0-9]$jour\-$mois[^0-9]", $article);

  11. #11
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    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.

  12. #12
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    strpos($article, "$jour-$mois-$annee")
    Pour le code de Fladnag c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Vive les roues en pierre

  13. #13
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  14. #14
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    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().
    Vive les roues en pierre

  15. #15
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    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.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par alain31tl
    C'est ce fameux séparateur (-) qui semble poser probléme
    Et avec l'échappement devant le - ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(ereg("($mois)\-($annee)",$article))
    webrider

  17. #17
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>");
    }
    Vive les roues en pierre

  18. #18
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    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

  19. #19
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    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.

  20. #20
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    if (strpos($article, " $jour-$mois-$annee")!== FALSE) {
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Verification syntaxe fonction javascript
    Par calitom dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 12/09/2006, 16h02
  2. [PHP-JS] syntaxe fonction verification select
    Par calitom dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2006, 14h53
  3. Fonction ereg() Aide
    Par unclebob dans le forum Langage
    Réponses: 1
    Dernier message: 17/08/2006, 21h24
  4. fonction ereg
    Par dubitoph dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2006, 19h20
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo