示例#1
0
 protected function _getExceptions()
 {
     $oPerson = Factory::create('Person', $this->_oString->getLocale());
     $aParticles = $oPerson->particles();
     $aExceptions = array();
     if ($aParticles) {
         $aExceptions = array('`(?<![[:alnum:]])(' . implode('|', $aParticles) . ')(?![[:alnum:]])`i' => self::LOWER_CASE);
     }
     return $aExceptions;
 }
示例#2
0
 protected function _setCase($sInputString, $cCase)
 {
     $sModifier = $this->_m();
     switch ($cCase) {
         case self::INITIAL_CASE:
             $sOutputString = $sInputString;
             break;
         case self::UPPER_CASE:
             $sOutputString = mb_strtoupper($sInputString, $this->_oString->getEncoding());
             break;
         case self::LOWER_CASE:
             $sOutputString = mb_strtolower($sInputString, $this->_oString->getEncoding());
             break;
         case self::SNAKE_CASE:
             $sLoweredString = mb_strtolower($sInputString, $this->_oString->getEncoding());
             $sUnderscoredLoweredString = preg_replace('`([[:punct:][:space:]]+)`' . $sModifier, '_', $sLoweredString);
             $sOutputString = preg_replace('`^_|_$`', '', $sUnderscoredLoweredString);
             break;
         case self::CAPITALIZE_CASE:
             $sEncoding = $this->_oString->getEncoding();
             $sLoweredString = mb_strtolower($sInputString, $this->_oString->getEncoding());
             $sOutputString = preg_replace_callback('`(' . Regex::word() . ')`' . $sModifier, function (&$aWord) use($sEncoding) {
                 $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[1], $sEncoding, 0, 1), $sEncoding);
                 $sEndingWord = Encoding::substr($aWord[1], $sEncoding, 1);
                 return $sFirstLetter . $sEndingWord;
             }, $sLoweredString);
             break;
         case self::TITLE_CASE:
             // Mise en majuscule de la première lettre de chaque mot
             $sCapitalizedString = $this->_setCase($sInputString, self::CAPITALIZE_CASE);
             // Mise en minuscule de la première lettre des petits mots de liaison
             $sEncoding = $this->_oString->getEncoding();
             $oLocale = Factory::create('Base', $this->_oString->getLocale());
             $sPatternLowerWords = '`(?<![[:alnum:]])(' . implode('|', $oLocale->getTitleCaseSmallWords()) . ')(?![[:alnum:]])`i';
             $sLoweredCapitalizedString = preg_replace_callback($sPatternLowerWords . $sModifier, function (&$aWord) use($sEncoding) {
                 return mb_strtolower($aWord[0], $sEncoding);
             }, $sCapitalizedString);
             // Mise en majuscule de la première lettre des mots suivants les caractères de ponctuation suivants : .-:!'?
             $aLoweredCapitalizedStrings = preg_split("`([.\\-:!'?])`", $sLoweredCapitalizedString, -1, PREG_SPLIT_DELIM_CAPTURE);
             foreach ($aLoweredCapitalizedStrings as &$sString) {
                 $sString = preg_replace_callback('`([a-zA-Z])(?:.*?)$`' . $sModifier, function (&$aWord) use($sEncoding) {
                     $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[0], $sEncoding, 0, 1), $sEncoding);
                     $sEndingWord = Encoding::substr($aWord[0], $sEncoding, 1);
                     return $sFirstLetter . $sEndingWord;
                 }, $sString);
             }
             $sOutputString = implode('', $aLoweredCapitalizedStrings);
             break;
         case self::SENTENCE_CASE:
             $sEncoding = $this->_oString->getEncoding();
             $sOutputString = preg_replace_callback('`(' . Regex::sentence() . ')`' . $sModifier, function (&$aWord) use($sEncoding) {
                 $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[1], $sEncoding, 0, 1), $sEncoding);
                 $sEndingWord = Encoding::substr($aWord[1], $sEncoding, 1);
                 return $sFirstLetter . $sEndingWord;
             }, $sInputString);
             break;
         case self::STUDLY_CAPS:
             $sEncoding = $this->_oString->getEncoding();
             $sOutputString = preg_replace_callback('`([a-zA-Z])`' . $sModifier, function (&$aChar) use($sEncoding) {
                 if (rand(0, 1)) {
                     return mb_strtolower($aChar[1], $sEncoding);
                 } else {
                     return mb_strtoupper($aChar[1], $sEncoding);
                 }
             }, $sInputString);
             break;
         case self::CAMEL_CASE:
             $sEncoding = $this->_oString->getEncoding();
             $sLoweredString = mb_strtolower($sInputString, $this->_oString->getEncoding());
             $sUcwordString = preg_replace_callback('`(' . Regex::word() . ')`' . $sModifier, function (&$aWord) use($sEncoding) {
                 $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[1], $sEncoding, 0, 1), $sEncoding);
                 $sEndingWord = Encoding::substr($aWord[1], $sEncoding, 1);
                 return $sFirstLetter . $sEndingWord;
             }, $sLoweredString);
             $sOutputString = preg_replace('`([[:punct:][:space:]]+)`' . $sModifier, '', $sUcwordString);
             break;
         case self::DROMEDARY_CASE:
             // Mise en CamelCase
             $sCapitalizedString = $this->_setCase($sInputString, self::CAMEL_CASE);
             $sEncoding = $this->_oString->getEncoding();
             $sFirstLetter = mb_strtolower(Encoding::substr($sCapitalizedString, $sEncoding, 0, 1), $sEncoding);
             $sEndingWord = Encoding::substr($sCapitalizedString, $sEncoding, 1);
             $sOutputString = $sFirstLetter . $sEndingWord;
     }
     return $sOutputString;
 }
示例#3
0
 public function __construct($sLocale, $cGender = self::ANY)
 {
     $this->_oLocale = Factory::create('Person', $sLocale);
     $this->setGender($cGender);
 }