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 seulement un caractère, string, substr, str_replace


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de zool.bzh
    Homme Profil pro
    peintre industriel
    Inscrit en
    Octobre 2023
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : peintre industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2023
    Messages : 172
    Par défaut Remplacer seulement un caractère, string, substr, str_replace
    Bonjour
    Je voudrais supprimer les zéros en trop en début de chaime pour mes photos.
    Avec ma manip ça supprime tous les zéros voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $string="image_0404.jpg";
    $t = 8;
    $str_tof = substr($string, - $t, 4);
    $replace = str_replace(".jpg", "", $str_tof);
    echo $replace;         // me donne 0404
    $compt = substr($replace, - 4, 1);
    if ($compt == 0){
    	$str_pos = str_replace(0, "", $replace);
            echo $str_pos;  //me donne 44
    	                   // je voudrais 404
    }
    Voyez vous comment faire ??

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 465
    Par défaut
    Tu devrais pouvoir le faire avec trim.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Récupère la série de chiffres suivants les zéros initiaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $file = 'image_0404.jpg';
    preg_match('/^image_0*(\\d+)/', $file, $match);
    print_r($match[1]); // "404"

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 465
    Par défaut
    et pourquoi pas utiliser trim avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $trimmed = trim($text, "0");
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Il y a aussi sscanf() :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $file = 'image_0404.jpg';
    [$n] = sscanf($file, 'image_%d.jpg');
    echo $n; // 404

    trim(), pourquoi pas.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2025
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2025
    Messages : 4
    Par défaut
    Salut,

    Le sujet date un peu, mais comme j'avais envie...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?php
    	function removeLeadingZeros($filename) {
    		$finalFilename = '';
    		$filenameLen = strlen($filename);
    		$hasNum = false;
    		for($i = 0; $i < $filenameLen; $i++) {
    			if('0' == $filename[$i]) {
    				if($hasNum) {
    					$finalFilename .= $filename[$i];
    				}
    			} else {
    				if(!$hasNum && is_numeric($filename[$i])) {
    					$hasNum = true;
    				}
    				$finalFilename .= $filename[$i];
    			}
    		}
    		return $finalFilename;
    	}
     
    	echo removeLeadingZeros('image_0404.jpg');
    ?>
    Ou comme ça avec un niveau d'imbrication en mois...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    	function removeLeadingZeros($filename) {
    		$finalFilename = '';
    		$filenameLen = strlen($filename);
    		$hasNum = false;
    		for($i = 0; $i < $filenameLen; $i++) {
    			if($hasNum) {
    				$finalFilename .= $filename[$i];
    			} else if('0' == $filename[$i]) {
    			} else if(is_numeric($filename[$i])) {
    				$finalFilename .= $filename[$i];
    				$hasNum = true;
    			} else {
    				$finalFilename .= $filename[$i];
    			}
    		}
    		return $finalFilename;
    	}
     
    	echo removeLeadingZeros('image_0404.jpg');
    ?>
    Les 2 exemples reçoivent 'image_0404.jpg' et renvoient 'image_404.jpg'.

  7. #7
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Quel intérêt une fonction de 15 lignes alors qu'un preg_replace en une ligne le fait très bien ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2025
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2025
    Messages : 4
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Quel intérêt une fonction de 15 lignes alors qu'un preg_replace en une ligne le fait très bien ?
    Ben normalement c'est pour décorer le sapin...

    Mais oui tu as tout à fait raison.
    Malheureusement je n'utilise quasi jamais les fonctions avec des patterns, j'ai toujours peur de mal l'écrire et que ça foire dans certains cas.
    Donc oui des fois je complique pour rien.

    Du coup tu pourrais indiquer le pattern pour le preg_replace ?

  9. #9
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Quel intérêt une fonction de 15 lignes alors qu'un preg_replace en une ligne le fait très bien ?
    La beauté du geste

    @Narkos, il y a une solution avec regexp un peu plus haut

  10. #10
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2025
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2025
    Messages : 4
    Par défaut
    Ah en passant dessus j'ai même pas tiqué... effectivement ''/^image_0*(\\d+)/''

    Merci pour ton message.

    Décidément je n'avais pas pensé à une regexp aussi simple, je restais buté à chercher "s'il y a un 0, est-ce qu'il y avait des chiffres ou non 0 avant etc" et c'était pas du tout la bonne façon de voir le truc.
    Je pense qu'il est l'heure de me plonger dans les regexp pour combler ce trou de compétences.

  11. #11
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 007
    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 : 3 007
    Par défaut
    Pour changer le nom du fichier avec preg_replace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $filename = preg_replace('~^image_\K0+(?=\d)~', '', $filename);

  12. #12
    Membre confirmé Avatar de zool.bzh
    Homme Profil pro
    peintre industriel
    Inscrit en
    Octobre 2023
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : peintre industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2023
    Messages : 172
    Par défaut
    merci a tous !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/12/2008, 17h22
  2. Comment remplacer les "\" dans un "string"
    Par leduc26 dans le forum C++
    Réponses: 11
    Dernier message: 15/04/2008, 11h38
  3. Remplacer \ par \\ dans une string?
    Par g0ldenrno dans le forum Langage
    Réponses: 9
    Dernier message: 05/06/2006, 20h22
  4. [string] substr
    Par GLDavid dans le forum C++
    Réponses: 3
    Dernier message: 18/04/2006, 15h14
  5. string.substr() & string.split() ???
    Par BnA dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/03/2006, 16h27

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