Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
<?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