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 :

[POO] détecter un mot qui comporte plus de deux consonnes ou voy..


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut [POO] détecter un mot qui comporte plus de deux consonnes ou voy..
    Bonjour,

    Comment détecter un mot comportant plus de deux consonnes/voyelles, et supprimer celles en surplus ?

    Histoire de ne pas avoir des trucs du genre "ah le c*********************n !", qui passerait outre mon script de filtration des mots grossiers.

    N'étant pas un pro des regex, je viens donc chercher votre aide.
    Je n'ai pas vu dans les tutoriaux la façon d'indiquer plus de N consonnes/voyelles SANS limitations (il n'y avait que "se termine par N consonnes/voyelles)

    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    pour ton exemple la regexp est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $reg = "`\sco+n\s`";
    sinon si tu veux en savoir plus sur l'utilisation des expression régulière avec PHP :
    http://cyberzoide.developpez.com/php4/regex/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ok... merci

    Bon voici une fonction qui va chercher dans un texte les mots qui comportent plus de N caractères et qui les sépare le cas échéant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      $nombreMots = explode(' ', $contenuC);
    for($i=0;$i<count($nombreMots);$i++) {
       if (strlen($nombreMots[$i]) > 30) {
    $longueur = 30;
    $caractere = ' '; // Ce que tu utilises pour séparer le mot
    $contenuC = preg_replace('`([[:alnum:][:punct:]]{'.$longueur.'})`smU','$1'.$caractere,$contenuC);
       }
    }
    Pourriez-vous m'aider à adapter celle-ci pour les mots comportants plus de deux consonnes ou voyelles d'affilés ?

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, je ne pense pas que tu aies vu, mais tu peux simplifier ton code : http://www.developpez.net/forums/vie...light=#2539895

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Si j'ai vu, mais sans boucle FOR ça ne va pas fonctionner non ?

    Bon je vais essayer, deux minutes.

    **edit**

    Bah oui, ça fonctionne aussi, j'ai dû rater un épisode (re Merci pour la fonction ).

    Mais pour mon histoire de détection de mots avec deux ou trois consonnes ?

    **edit2**
    J'ai lu la page sur les expressions régulières, mais de là à comprendre cette phrase par coeur... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $longueur = 30;
    $caractere = ' '; // Ce que tu utilises pour séparer le mot
    $contenuC = preg_replace('`([[:alnum:][:punct:]]{'.$longueur.'})`smU','$1'.$caractere,$contenuC);
    Que viennent faire le smU et le $1 là dedans, par exemple ?

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    smU =>
    http://fr3.php.net/manual/fr/reference.pcre.pattern.modifiers.php

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    $1 =>
    Citation Envoyé par [url
    http://fr3.php.net/manual/fr/function.preg-replace.php[/url]]replacement peut contenir des références de la forme \\n ou, (depuis PHP 4.0.4) $n. Cette dernière forme est recommandée. Ces références seront remplacées par le texte capturé par la n-ième parenthèse capturante du masque. n peut prendre des valeurs de 0 à 99, et \\0 ou $0, correspondent au texte de qui satisfait le masque complet. Les parenthèses ouvrantes sont comptées de gauche à droite (en commençant à 1) pour déterminer le numéro de parenthèse capturante.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ok, merci à vous, j'y vois un peu plus clair. A force de les utiliser, ça viendra comme le reste. Faut être patient avec les débutants

    J'oserais bien vous redemander un coup de main pour le sujet du post...
    Je n'ai pas une tentative de code à vous fournir, je bloque complètement.

  9. #9
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Pour ce cas précis, j'utilise un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = preg_replace( '#(a+|b+|c+|d+|e+|f+|g+|h+|i+|j+|k+|l+|m+|n+|o+|p+|q+|r+|s+|t+|u+|v+|w+|x+|y+|z+)#i', '$1', $string );
    Y a sûrement moyen d'optimiser selon le contexte. Mais ça donne l'idée de base.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Merci pour ta réponse,

    Nonobstant le fait que je n'ai pas compris la ligne de code, celle-ci ne change rien du tout quand je l'applique.

    J'ai écrit ce mot dans mon formulaire:

    mangeeeeeeeeeeeeee

    ça m'a ressorti la même chose, alors que le but est de ressortir mangee.

  11. #11
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Yep, effectivement, c'est à cause du "$1"... il faut donc utiliser un tableau.... désolé.

  12. #12
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    ce qui donnerait deux solutions :

    utiliser substr() pour modifier ce que renvois $1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = preg_replace( '#(a+|b+|c+|d+|e+|f+|g+|h+|i+|j+|k+|l+|m+|n+|o+|p+|q+|r+|s+|t+|u+|v+|w+|x+|y+|z+)#ie', 'substr( \'$1\', 0, 2 )', $string );
    utiliser un tableau pour faire correspondre le bon résultat à chaque masque :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    $string = preg_replace(
                array(
                    '#a{3,}#i',
                    '#b{3,}#i',
                    '#c{3,}#i',
                    '#d{3,}#i',
                    '#e{3,}#i',
                    '#f{3,}#i',
                    '#g{3,}#i',
                    '#h{3,}#i',
                    '#i{3,}#i',
                    '#j{3,}#i',
                    '#k{3,}#i',
                    '#l{3,}#i',
                    '#m{3,}#i',
                    '#n{3,}#i',
                    '#o{3,}#i',
                    '#p{3,}#i',
                    '#q{3,}#i',
                    '#r{3,}#i',
                    '#s{3,}#i',
                    '#t{3,}#i',
                    '#u{3,}#i',
                    '#v{3,}#i',
                    '#w{3,}#i',
                    '#x{3,}#i',
                    '#y{3,}#i',
                    '#z{3,}#i',
                    ),
                array(
                    'aa',
                    'bb',
                    'cc',
                    'dd',
                    'ee',
                    'ff',
                    'gg',
                    'hh',
                    'ii',
                    'jj',
                    'kk',
                    'll',
                    'mm',
                    'nn',
                    'oo',
                    'pp',
                    'qq',
                    'rr',
                    'ss',
                    'tt',
                    'uu',
                    'vv',
                    'ww',
                    'xx',
                    'yy',
                    'zz',
                    ),
                $string,
                );
    Un des avantages de la première solution c'est qu'elle conserve la majuscule dans le cas ou le caractère en question est en majuscule.

    Coté perfs.... à voir....

    PS : je précise que je n'ai testé aucun de ces codes hein. Le but à la base était de t'aiguiller, pas de tout faire

    EDIT : ici je me suis basé sur ton dernier exemple, c'est à dire : mangeeeeeee donnera mangee ; ce qui ne correspond pas à ton premier exemple à savoir que coooooooooon donnera coon et non con.
    A toi de voir ce que tu recherches vraiment.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ouh là je ne m'y retrouve plus moi même dans ce que je veux faire...

    En fait je filtre les mots grossiers à l'aide d'un tableau, avec dedans, par exemple, le mot "con" (désolé).

    Mais si le gars marque "coooon", ça va passer.
    Donc le but est de supprimer les voyelles en surplus : Seules deux voyelles différentes peuvent se suivrent (ai, io,ui etc...), mais on a pas, me semble t-il de mots comportant deux voyelles identiques consécutives (je ne parle pas des é, ée etc...). Idem pour les consonnes, il n'y a que les Slaves qui sont capables d'en aligner 5 de suites. Donc pour nous, si il y en a trois de suite, ou plus, on peut supprimer celles qui dépasse et ramener leur nombre à deux.

    Bon voilà, je me suis remis les idées au clair, vu que je suis sur plusieurs scripts à la fois.
    Je vais essayer ton code, Kioob.

  14. #14
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    mais on a pas, me semble t-il de mots comportant deux voyelles identiques consécutives
    cool, igloo, ...
    Et les acronymes ?
    POO, AAC, IEEE, ...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Et je viens d'essayer, c'est pas mal du tout, déjà merci !
    Mais avant de poser quelques questions sur le fonctionnement qui m'échappe,
    je crois qu'il convient d'améliorer cette fonction pour la rendre utile :

    1) Interdire deux voyelles identique à la suite.
    2) Interdire trois consonnes identique à la suite en cours de mot.
    3) Interdire deux consonnes identique à la suite en fin de mot.

    Avec cela, je crois que la fonction sera "haut de gamme".

    J'ai encore besoin d'aide pour cela parce que je ne pige pas toute la fonction de Kioob, même si je compte bien demander des explications après

    J'ai juste réussi à limiter l'affichage à une seule voyelle de suite (pas bien dur vous me direz...) mais ça pose problème pour les consonnes.

    Pour les trois autres points, je suis dans l'expectative.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation:
    mais on a pas, me semble t-il de mots comportant deux voyelles identiques consécutives

    cool, igloo, ...
    Et les acronymes ?
    POO, AAC, IEEE, ...
    Ah voilà Mr N, le cauchemar/sauveur des débutants

    Bien ma foi juste remarque que voilà et je me doutais bien qu'il y aurait des exceptions.

    Solutions ?

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par psychoBob
    Solutions ?
    Modération par une (ou plusieurs) personne(s) physique(s) !
    Travail qui peut être aidé automatiquement par l'utilisation d'un dictionnaire. Tout ce qui figure dans ce dictionnaire est censuré. Aux modérateurs à alimenter le dictionnaire à chaque fois qu'ils rencontre une bizzarerie du langage.
    Je pense que ca peut être étendu à des groupes de mots :
    PS: ces threads sont tout ce qu'il y a de plus poétique !

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon éventuellement je peux laisser la fonction telle quelle plutot que de trop l'alourdir et je rajoute dans mon tableau des insultes :
    Con
    conn

    Si le gars écrit connnnnnnnnnnnnnnnn, le script transformera le mot en conn,
    donc le message sera supprimé.

    Tant pis pour l'association AAAPPPEEE ou pour les eskimos et les angliscisme, je préfère une gêne sur ces points là, rare, que des gateries comme celles justement évitées par ce script.

    Pas d'objection? je peux poser des questions sur le script de Kioob ?

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Oui il y a une admin mais c'est à postériori.

    Le coup du C O N N A R D est assez sauvage, il est vrai.

    Travail qui peut être aidé automatiquement par l'utilisation d'un dictionnaire. Tout ce qui figure dans ce dictionnaire est censuré.
    Bien justement, je voudrais que ce soit automatique, avant l'insertion dans la base (puisque l'affichage est immédiat).


    il faudrait concaténer les passages comportant deux plus caractères uniques :
    exemple, a Paris fonctionne, mais a P aris donne aP aris, ou a Paris.

    Sinon une solution consiste à placer une caméra directement chez les internautes.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon sinon, quelqu'un pourrait-il m'aider à comprendre le script de Kioob?

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    $contenuC= preg_replace( '#(a+|b+|c+|d+|e+|f+|g+|h+|i+|j+|k+|l+|m+|n+|o+|p+|q+|r+|s+|t+|u+|v+|w+|x+|y+|z+)#ie', 'substr( \'$1\', 0, 2 )', $contenuC);
    $contenuC = preg_replace(
                array(
                    '#a{3,}#i',
                    '#b{3,}#i',
                    '#c{3,}#i',
                    '#d{3,}#i',
                    '#e{3,}#i',
                    '#f{3,}#i',
                    '#g{3,}#i',
                    '#h{3,}#i',
                    '#i{3,}#i',
                    '#j{3,}#i',
                    '#k{3,}#i',
                    '#l{3,}#i',
                    '#m{3,}#i',
                    '#n{3,}#i',
                    '#o{3,}#i',
                    '#p{3,}#i',
                    '#q{3,}#i',
                    '#r{3,}#i',
                    '#s{3,}#i',
                    '#t{3,}#i',
                    '#u{3,}#i',
                    '#v{3,}#i',
                    '#w{3,}#i',
                    '#x{3,}#i',
                    '#y{3,}#i',
                    '#z{3,}#i',
                    ),
                array(
                    'aa',
                    'bb',
                    'cc',
                    'dd',
                    'ee',
                    'ff',
                    'gg',
                    'hh',
                    'ii',
                    'jj',
                    'kk',
                    'll',
                    'mm',
                    'nn',
                    'oo',
                    'pp',
                    'qq',
                    'rr',
                    'ss',
                    'tt',
                    'uu',
                    'vv',
                    'ww',
                    'xx',
                    'yy',
                    'zz'),
     
                $contenuC
                );
    1) Que signifient les a+, b+, c+ etc...
    2) Que signifie le $i dans substr ?
    3) Que signifie la ligne '#a{3,}#i', ?
    4) Ce sont des expressions rationnelles tout ça ?
    5) Plutot que ces deux tableaux, on ne peut pas dire "toute voyelle ou toute consonne triplée", sans les détailler, puisqu'il n'y a pas d'exceptions ?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/06/2012, 03h24
  2. Réponses: 0
    Dernier message: 29/06/2011, 10h50
  3. [MASM 6.15] Mot qui se repéte le plus dans une chaîne
    Par bassoum dans le forum x86 16-bits
    Réponses: 0
    Dernier message: 08/11/2008, 18h15
  4. requete qui marche, puis qui marche plus, puis qui marche ..
    Par exyacc dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/04/2006, 19h32
  5. [RegEx] highlight d'un mot qui n'est PAS dans un tag html.
    Par FMaz dans le forum Langage
    Réponses: 5
    Dernier message: 22/03/2006, 14h07

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