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 :

Définir si un commentaire est en majuscule [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 24
    Points : 31
    Points
    31
    Par défaut Définir si un commentaire est en majuscule
    Bonjour,

    Mes visiteurs postent beaucoup de commentaires, et certaines uniquement en majuscule , mais avec des smileys ou des "^^" ... etc, donc pas détectable avec la fonction adéquate.

    Comment pourrai-je définir si un commentaire doit être refuser si il comporte + de 80% de majuscule par exemple ?

  2. #2
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Voici un regex qui permet de savoir si une string est en majuscule ou en minuscule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $string="JE SUIS UNE PHRASE QUI COMPORTE DES MAJUSCULES";
    if(preg_match("#[A-Z ]#",$string)){
      echo "Il y a des majuscules";
    }
    else{
      echo "Il n'y a pas de majuscules";
    }
    ?>
    et sans REGEX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $string = "JE SUIS UNE PHRASE QUI COMPORTE DES MAJUSCULES";
    if($string == strtoupper($string)) {
        echo "Il n'y a que des majuscules";
    } else {
        echo "Tout n'est pas en majuscules";
    }
    Maintenant, si tu veux faire la même chose pour 80% des caractères, il faudrait penser à un algorithme qui ressemblerait à celui-ci :

    POUR CHAQUE CARACTÈRE DE LA STRING (BOUCLE)
    SI MAJUSCULE
    MAJ++
    AUTREMENT
    MIN++

    TOTAL_MAJ = Nombre de caractères divisé par 100 * MAJ

    Si TOTAL_MAJ > 80%, ce n'est pas bon.
    C'est une première idée, peut-être que d'autres pourront t'aider mieux.

    bee

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 24
    Points : 31
    Points
    31
    Par défaut
    Ca passe ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $s = 'Hello World';
    $c = strlen($s);
    $up = 0;
     
    for($i = 0; $i <= $c; $i++)
    	ctype_upper($s[$i]) ? $up++ : null;
     
    echo ceil($up / $c * 100); echo ' % de lettre majuscule';

  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
    Tu peux faire une fonction qui calcule le ratio de lettres majuscules en les relevant avec preg_match_all. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    define('UC_RATIO_LIMIT', '0.8');
     
    function uc_ratio($str) {
        if (preg_match_all('~\p{Lu}+~u', $str, $m))
            return mb_strlen(implode('', $m[0])) / mb_strlen($str);
        return 0;
    }
     
    echo (uc_ratio($comment) > UC_RATIO_LIMIT) ? 'Trop de majuscules' : 'OK';
    La regex capture les majuscules en utilisant la classe unicode \p{Lu} (pour les lettres majuscules quelque soient l'alphabet ou les accents utilisés).
    Le modificateur u permet de traiter la chaîne comme une chaîne unicode.
    Par la suite on utilise mb_strlen au lieu de strlen pour être sûr qu'un caractère codé sur plusieurs octets soit bien vu comme un seul caractère et pas plusieurs.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Ou simplement sans regex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function isAllCaps($str)
    {
    	return similar_text($str,strtoupper($str)) == strlen($str))
    }
    Similar_text renvoi le nombre de caractère identique , donc si tout est en majuscule , ca renvoi la taille de ta chaine. Si tu veux autoriser un certains pourcentage de majuscule il suffit de faire un petit calcul.

    Par exemple imposer 80% de minuscule dans le texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function hasMostlyLowerCase($str,$ratio)
    {
    	return similar_text($str,strtolower($str)) >= strlen($str) * $ratio)
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(hasMostlyLowerCase('AZertyuiop',0.8)); // true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(hasMostlyLowerCase('AZertDFiop',0.8)); // false
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Tester si le contenu d'une variable est en majuscule
    Par diombo dans le forum VBA Access
    Réponses: 8
    Dernier message: 16/01/2019, 15h45
  2. [Draw] Définir si un point est dans un losange
    Par Explain dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/11/2009, 14h44
  3. Réponses: 3
    Dernier message: 19/07/2007, 16h32
  4. Formulaire : verifier si un caractere est en majuscule
    Par alexbubs dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 19/10/2005, 12h01
  5. Réponses: 2
    Dernier message: 08/10/2005, 20h08

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