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 :

remplacer les slash d'une date [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Points : 53
    Points
    53
    Par défaut remplacer les slash d'une date
    Bonjour,
    Je reprends du vieux code ou il y avait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $datefr = ereg_replace("/","-",$datefr);
    ereg replace n'est plus utilisé donc après recherches, j'utilise preg_replace, mais après de nombreuses recherches de doc et essais, cela ne fonctionne pas. En fait mon slash pose problème.
    Voici la syntaxe de mon dernier essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $datefr = preg_replace("//","-","28/05/2019");
    ce qui donne -2-8-0-5-2-0-1-9-

    Je n'y comprends plus rien je sens que je ne suis pas loin, mais je coince !
    Qu'est ce que je ne fais pas bien ?

    D'avance merci pour vos conseils !

  2. #2
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    un str_replace suffit
    $date = str_replace('/', '-', $datefr);
    Le bienfait n'est jamais perdu

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Points : 53
    Points
    53
    Par défaut
    En effet ! Pourquoi faire compliqué quand on peut faire simple.
    Merci !

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par Akazed Voir le message
    Voici la syntaxe de mon dernier essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $datefr = preg_replace("//","-","28/05/2019");
    ce qui donne -2-8-0-5-2-0-1-9-
    Pour l'explication: // représente non pas un slash échappé, mais une pattern (un motif) vide, car contrairement aux fonctions ereg, les fonctions preg_ écrivent leurs patterns entre deux caractères délimiteurs (et ici tes slashes vont faire office de délimiteurs). Cette syntaxe particulière permet d'insérer des modificateurs globaux en fin de pattern, par exemple: /A/i (la lettre A indifférente à la casse).

    Donc comme ta pattern est vide, elle est bien entendue vérifiée à chaque position de la chaîne de caractère, car rien est partout et même en fin de chaîne! D'où le résultat.

    Avec preg_replace il aurait fallu:
    • soit échapper le slash afin qu'il ne soit pas confondu avec le délimiteur: $datefr = preg_replace('/\//', '-', '28/05/2019');
    • soit choisir un délimiteur de pattern différent: $datefr = preg_replace('~/~', '-', '28/05/2019');


    Comme dit précédemment, il y a beaucoup plus simple: dés lors qu'on cherche des chaînes fixes, pas besoin de regex, il suffit d'utiliser la fonction php pour les substitutions de chaînes str_replace.

    Mais dans ce cas précis (le remplacement d'un caractère par un autre), on peut utiliser la fonction dédiée à cet effet: strtr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $datefr = strtr('28/05/2019', '/', '-');
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    On peut aussi créer un véritable objet date afin de faire de vrais calcul dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date = DateTime::createFromFormat('d-m-Y', $datefr);
    echo $datefr->format('d/m/Y');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. remplacer les cotes dans une chaine de caractère
    Par zut94 dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2006, 17h38
  2. Remplacer les accents dans une chaîne
    Par mathieumg dans le forum C
    Réponses: 9
    Dernier message: 23/07/2006, 15h39
  3. Fixer l'heure, les minutes et les secondes d'une date
    Par pyxosledisciple dans le forum Access
    Réponses: 2
    Dernier message: 22/02/2006, 08h02
  4. [Utilisation] Récupérer les modifications depuis une date donnée
    Par Sapience dans le forum CVS
    Réponses: 1
    Dernier message: 15/02/2006, 12h08
  5. [langage] remplacer les caractères d'une chaine
    Par perlaud dans le forum Langage
    Réponses: 14
    Dernier message: 12/05/2004, 11h05

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