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

JavaScript Discussion :

Fonction String pour acronymer une phrase (garder une lettre par mot)


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 424
    Points : 878
    Points
    878
    Par défaut Fonction String pour acronymer une phrase (garder une lettre par mot)
    bonjour,

    existe-t-il une fonction/méthode au type string pour transformer une chaîne en acronyme ?
    par exemple, "rendez-vous infimerie" deviendrait "R-V I" ?
    c-a-d détecter chaque espace ou caractère spécial et ne garder que le caractère précédent.

    peut-être que jquery ou une expression régulière fait ça en une ligne (une ligne pour ne pas alourdir la lecture du code) ? j'ai cherché du côté anglais de "sanitizer" ou "cleaner" string, mais je n'ai rien trouvé...


    Bonne journée

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 440
    Points : 4 942
    Points
    4 942
    Par défaut
    Bonjour,

    En utilisant seulement javascript et une simple expression régulière avec son callback, ça donnerait le résultat que tu cherches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let str="rendez-vous infimerie",
    strModified=str
    .replace(/\w+/gi,function (value,indexValue){
    return value.charAt(0).toUpperCase();
    });
    console.log(strModified);//résultat : R-V I

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 424
    Points : 878
    Points
    878
    Par défaut
    merci toufik.

    je vais tenter sur un jeu d'essai.

    en y repensant avec php (même si j'ai besoin de js), je me disais que peut-être il y a un coup à jouer en js avec des équivalent ucfirst ou ucword.
    en un premier temps, on capitalise la chaine
    en un second temps on ne garde que les capitales.
    peut-être plus lisible/performant qu'un regEx...

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 896
    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 896
    Points : 6 655
    Points
    6 655
    Par défaut
    Citation Envoyé par clavier12AZQSWX Voir le message
    en y repensant avec php (même si j'ai besoin de js), je me disais que peut-être il y a un coup à jouer en js avec des équivalent ucfirst ou ucword.
    en un premier temps, on capitalise la chaine
    en un second temps on ne garde que les capitales.
    peut-être plus lisible/performant qu'un regEx...
    Pas lisible? C'est une pattern de trois caractères, pas de quoi faire une crise d'apoplexie non plus!
    Aprés se demander s'il n'y a pas de solution plus immédiate avec deux trois fonctions basiques sur les chaînes est légitime. Des fois ça marche, mais là j'ai des doutes, car tu devras à un moment ou un autre boucler sur les caractères de la chaîne pour les tester un par un et là la performance risque d'en prendre un coup.
    Dans le cas présent, seul un algorithme dédié à cette tâche et écrit dans un langage compilé pourrait rivaliser.


    J'aurais fait le uppercase à la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let result = txt.replace(/(\p{L})\p{L}*/gu, '$1').toUpperCase();
    (\p{L} est la version courte de \p{Letter}. On capture la première lettre et on la retourne dans la pattern de remplacement avec $1).
    Presque pareil en PHP:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mb_strtoupper(preg_replace('/\pL\K\pL*/u', '', $txt));
    (En PHP, tu peux même virer les accolades autour du L. Ici pas besoin de capture, la première lettre qui est placée avant le \K ne fait pas partie de la correspondance, seules restent les autres lettres remplacées par une chaîne vide.)

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Le match ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mystring="la première lettre de chaque mot";
    reg= /\b\w/gi;
    tab=mystring.match(reg);
    out=tab.map(x =>  x.toUpperCase());
    console.log(out.join(' '));

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

Discussions similaires

  1. [XL-2007] La fonction RechercheV pour chercher une partie de phrase
    Par Florian.b dans le forum Excel
    Réponses: 3
    Dernier message: 29/01/2014, 17h22
  2. la fonction sort pour trier une liste
    Par memo07 dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/11/2007, 16h58
  3. Réponses: 3
    Dernier message: 03/08/2007, 07h36
  4. Réponses: 4
    Dernier message: 28/06/2007, 01h28
  5. Fonction standard pour dédoublonner une liste ?
    Par ecocentric dans le forum Général Python
    Réponses: 3
    Dernier message: 22/08/2005, 10h41

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