Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-09-2011 15:46:49

nk34
Membre
Date d'inscription: 10-08-2011
Messages: 32

Validation de phrase

Bonjour,
une petite contribution à améliorée (et à partager ici) pour valider une phrase,
Elle est basée sur le nombre de mots réels, d'une part
et sur la longueur des mots et le pourcentage de mots courts dans la phrase :

Code:

<?php

/**
 * Class de validation de phrase
 * 
 * @author     : Jean luc BARAT (*******@***********)
 * @date    : 13/09/2011
 * @license : GNU
 * 
 */
    require_once 'Zend/Validate/Abstract.php';
    class Nk_Form_Validate_Sentence extends Zend_Validate_Abstract 
    {
        const MSG_NOENOUGTHWORD     = 'noenought';
        const MSG_TOOLONGWORD        = 'toolongword';
        const MSG_SEEMNOSENTENCE    = 'seemnosentence';
        
        protected $_messageTemplates = array(
            self::MSG_TOOLONGWORD         => "Il y a des mots trop longs",
            self::MSG_NOENOUGTHWORD        => "La phrase ne contient pas assez de mots",
            self::MSG_SEEMNOSENTENCE    => "La phrase semble incorrecte, rédigez une vraie phrase"
        );
        
        /*
         * @param int the minimum words must contains the sentence
         */
        private $_minWords;
        
        /**
         * Sets validator options
         *
         * @param  string $minWords the minimum of words
         * @return void
         */
        public function __construct($minWords) 
        {
            $this->_minWords = $minWords;
        }
        
           /**
         * Validate of sentence based on percent of short words
         * @see Zend_Validate_Interface::isValid()
         *
         * @param mixed $value
         * @return boolean
         */
        public function isValid ($value)
        {    
            $this->_setValue($value);
            $shortWord = 0;
            
            // sépare tout ce qui contient ni des mots ni underscore
            $exp         = "/[\W_]/"; 
            $champ         = utf8_decode($value);
            $words         = preg_split($exp, $champ , -1,  PREG_SPLIT_NO_EMPTY);
            $nbWords     = count($words);
                        
            if( $nbWords <= $this->_minWords ) {
                $this->_error(self::MSG_NOENOUGTHWORD);
                return false;
            }
            
            foreach($words as $word) {
                if(strlen($word) > 15 && strlen($word)) {
                    $this->_error(self::MSG_TOOLONGWORD);
                    return false;
                }
                if(strlen($word) <= 3) {
                    $shortWord += 1;
                }
            }
            
            # calculate percent of short words
            if(100 * $shortWord / $nbWords > 70) {
                    $this->_error(self::MSG_SEEMNOSENTENCE);
                    return false;
            }            
            
            return true;
        }
    }

A plus

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages