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 :

Isoler des majuscules dans une variable


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    447
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 447
    Points : 173
    Points
    173
    Par défaut Isoler des majuscules dans une variable
    J'ai une variable qui contient les Prénom et le nom des mes utilisateurs, je voudrais isoler ces 2 données en sachant que le nom est toujours en majuscule, comment puis je faire ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Une expression régulière et preg_match() pourraient le faire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    447
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 447
    Points : 173
    Points
    173
    Par défaut je comprends
    Comment utiliserais tu cette fonction, je comprends psa trop la ?

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Une méthode "bourrin" :

    Si tes chaines sont de la forme DUPONTalbert et stockées dans une variable $var :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $nom = "";
     
    for($i=0; $i<strlen($var); $i++){
     
    if(substr($var, $i, 1) == strtoupper(substr($var, $i, 1)))
    $nom .= substr($var, $i, 1);
     
    }
     
    $prenom = str_ireplace($nom, "", $var);

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    447
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 447
    Points : 173
    Points
    173
    Par défaut plus suptible
    on va dire que ma chaine est de type = "Albert DUPONT" ???

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Idem en remplacant dans ta boucle $i=0 par $i=1 et fais un trim au préalable pour être plus propre

    EDIT :

    et à la fin :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $prenom = trim(str_ireplace($nom, "", $var));

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    J'ai une variable qui contient les Prénom et le nom des mes utilisateurs, je voudrais isoler ces 2 données en sachant que le nom est toujours en majuscule, comment puis je faire ?
    Et le prénom peut comporter des majuscules d'après ce que je vois ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  8. #8
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    447
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 447
    Points : 173
    Points
    173
    Par défaut erreur
    cele me donne une erreur "Fatal error: Call to undefined function subtr()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $nom = "";
    $var = "Albert DUPONT";
    for($i=1; $i<strlen($var); $i++){
     if(substr($var, $i, 1) == strtoupper(substr($var, $i, 1))){
      $nom .= subtr($var, $i, 1);
     }
     $prenom = trim(str_ireplace($nom, "", $var));
    }
    ?>

  9. #9
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par PrinceMaster77 Voir le message
    cele me donne une erreur "Fatal error: Call to undefined function subtr()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $nom = "";
    $var = "Albert DUPONT";
    for($i=1; $i<strlen($var); $i++){
     if(substr($var, $i, 1) == strtoupper(substr($var, $i, 1))){
      $nom .= subtr($var, $i, 1);
     }
     $prenom = trim(str_ireplace($nom, "", $var));
    }
    ?>

    C'est substr

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    subtr non !

    substr oui
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  11. #11
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    447
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 447
    Points : 173
    Points
    173
    Par défaut ok mais ...
    merci cela fonctionne pour les personnes ayant un nom "simple", mais ne parche plus des que mes utilisateurs ont un prénom composée "jean Paul" ou un nom composé "De Winter"

  12. #12
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Tu as des noms composés de minuscules aussi (De Winter) ?
    Quelle est l'étendue de tes cas possibles ?

  13. #13
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Juste une question:
    Entre le nom et le prénom, ya tjs un espace ?

    Parceque sinon, là tu peux utiliser une regexp sur le nom (que des majuscules) avec avant un explode sur l'espace.

    mais De Winter serait DE WINTER
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  14. #14
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    447
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 447
    Points : 173
    Points
    173
    Par défaut les différents cas
    et oui j'ai toujours un espace entre le prénom et le nom mais aussi tous ces cas :

    Albert DUPONT
    Jean Albert DUPONT
    Albert DE DUPONT
    Albert DA DUPONT
    Albert DI DUPONT
    Jean-Gerard DUPONT

  15. #15
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par PrinceMaster77 Voir le message
    Jean Albert DUPONT
    Albert DE DUPONT
    Albert DA DUPONT
    Albert DI DUPONT
    Jean-Gerard DUPONT
    Si tes noms sont toujours en majuscules alors faire un explode sur l'espace et regarder si les occurences ne contiennent que des majuscules si oui alors concaténer dans l'ordre des indices de ton tableau explode toutes ces occurences pour former ton nom

    EDIT :

    Code php : 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
    24
    25
    26
     
    <?php
     
    $tab = array("Jean DUPONT", "Jean DI DUPONT");
     
    for($i=0; $i<count($tab); $i++){
     
    $nom = "";
    $prenom = "";
     
    $tmp = explode(" ", $tab[$i]);
     
       for($j=0; $j<count($tmp); $j++){
              if($tmp[$j] ==  strtoupper($tmp[$j])
                  $nom .= $tmp[$j]." ";
              else
                  $prenom .= $tmp[$j]." ";
     
       }
     
    $nom = rtrim($nom)
    $prenom = rtrim($prenom)
     
     }
     
    ?>

  16. #16
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    voilà (explode + regexp sur les majuscules).

    Suis pas un pro des regexp mais un truc dans le genre sur chaque partie :
    /^[A-Z]+[A-Z]*$/
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  17. #17
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Sinon, une autre façon de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $str = 'Albert DUPONT
    Jean Albert DUPONT
    Albert DE DUPONT
    Albert DA DUPONT
    Albert DI DUPONT
    Jean-Gerard DUPONT';
     
    $reg = '/^([A-Z][a-z]+)((?: [A-Z]+)+)$/m';
     
    preg_match_all($reg, $str, $m);
     
    print_r($m);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  18. #18
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour s.n.a.f.u,

    Tu peux m'expliquer la zone : (?: [A-Z]+) stp

    merci
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  19. #19
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour s.n.a.f.u,

    Tu peux m'expliquer la zone : (?: [A-Z]+) stp

    merci
    [A-Z]+ signifie une majuscule répétées au moins une fois

    le motif (?: ) est une parenthèse non-capturante, pour économiser les perfs

    Et mon motif était incomplet, il manquait le dernier bonhomme.
    Celui-ci attrape tout le monde :

    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
    <?php
    $str = 'Albert DUPONT
    Jean Albert DUPONT
    Albert DE DUPONT
    Albert DA DUPONT
    Albert DI DUPONT
    Jean-Gerard DUPONT
    Foo DE-BAR
    snafu FUBAR
    Jean Charles FOOBAR
    Francois Xavier DI FOOBAR';
     
    $reg = '/^((?:[A-Z]?[a-z- ]+)+)((?: [A-Z-]+)+)$/m';
     
    preg_match_all($reg, $str, $m);
     
    print_r($m);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  20. #20
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    le motif (?: ) est une parenthèse non-capturante, pour économiser les perfs
    OUTCHHH, va falloir que je regarde celà de plus près

    Merci bien, bonne journée
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

Discussions similaires

  1. [SQL2005] pousser des données dans une variable
    Par Monnier Eric dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/03/2008, 16h05
  2. [MySQL] autoriser des espaces dans une variable
    Par khamett dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/10/2007, 12h13
  3. stocké des caractères dans une variable
    Par joe370 dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/07/2007, 13h36
  4. Perte des antislash dans une variable
    Par jonathan1 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/05/2007, 10h07
  5. insérer des côtes dans une variable pl/sql
    Par illegalsene dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 14h20

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