Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/02/2012, 00:40
iovan
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
[APORTE] Capitaliza adecuadamente un texto.

Hola amigos, hace un momento hice una pequeña clase para resolver un pequeño problema de capitalización. Es muy básica y no desarrollada para funcionar correctamente en todos los casos posibles, pero si que es intuitiva y realiza su cometido.


Para que sirve:

-> Un texto en el que se requiere capitalizar sola la primer letra de una cadena, También la que es seguida de signos de puntuación cualesquiera como: (punto, dos puntos, signo de admiración, interrogación, salto de linea, etc...)

-> Cuando el uso de MAYUSCULAS ES EXCESIVO

-> No TRANSFORMA palabras bien capitalizadas por el usuario, como las siglas de un objeto: Por ejemplo: E.U.A., U.N.A.M. y las que contengan esta estructura se conservarán igual.

-> También los sustantivos propios bien capitalizados no sufrirán transformación alguna.

Lo hice lo más sencillo, corto y fácil posible.
Código PHP:
Ver original
  1. class capitalization {
  2.  
  3.     public function hasCapitalized($word) {
  4.         if (preg_match("/^[A-Z0-9]+[A-Z0-9\.]+[\.]+$/", $word))
  5.             return true;
  6.         if (preg_match("/^[A-Z]{1}[^A-Z]+$/", $word))
  7.             return true;
  8.     }
  9.  
  10.     public function isEndOfSentence($subject) {
  11.         if (preg_match("/^(.)*[\.\x0A]+$/", $subject))
  12.             return true;
  13.     }
  14.  
  15.     public function capitaliza($text) {
  16.         $words = preg_split("/[\x20]+/", $text);
  17.         $bean = true;
  18.         foreach ($words as $key => $value) {
  19.             if ($bean)
  20.                 $words[$key] = ucwords(strtolower($value));
  21.             else
  22.                 $words[$key] = (hasCapitalized($value) ? $value : strtolower($value) );
  23.  
  24.             $bean = (isEndOfSentence($value) ? true : false);
  25.         }
  26.         return $words;
  27.     }
  28.  
  29. }

ejemplo de uso para los que no saben POO

Código PHP:
Ver original
  1. $obj = new capitalization;
  2.  
  3. $text = "estE TExTo TIENe uN MAL manEjo DE MinUsCulas y MayusCulas. el texto seRa CAPiTALIZaDO. la Primer PalAbra que EstA DespuEs de uN puNto o SalTo de LINEa \n será CapitaLizada.
  4.    palabras COMPLETAMENTE EN MAYUSCULAS son transFormAdas a MinusCulas, solo las PalabrAs bien CapitaLizadas como los SUSTANtiVos PropIos: México, España, Brazil, etc... se conservan ASi, tambiEn se conserva CapitalizACION
  5.    en AbrebiaTURAS COMO E.U.A.";
  6.  
  7. print_r($obj->capitaliza(utf8_decode($text)));

IMPRIME:

Cita:
Array
(
[0] => Este
[1] => texto
[2] => tiene
[3] => un
[4] => mal
[5] => manejo
[6] => de
[7] => minusculas
[8] => y
[9] => mayusculas.
[10] => El
[11] => texto
[12] => sera
[13] => capitalizado.
[14] => La
[15] => Primer
[16] => palabra
[17] => que
[18] => esta
[19] => despues
[20] => de
[21] => un
[22] => punto
[23] => o
[24] => salto
[25] => de
[26] => linea
[27] =>

[28] => Será
[29] => capitalizada.


[30] => Palabras
[31] => completamente
[32] => en
[33] => mayusculas
[34] => son
[35] => transformadas
[36] => a
[37] => minusculas,
[38] => solo
[39] => las
[40] => palabras
[41] => bien
[42] => capitalizadas
[43] => como
[44] => los
[45] => sustantivos
[46] => propios:
[47] => México,
[48] => España,
[49] => Brazil,
[50] => etc...
[51] => Se
[52] => conservan
[53] => asi,
[54] => tambien
[55] => se
[56] => conserva
[57] => capitalizacion


[58] => En
[59] => abrebiaturas
[60] => como
[61] => E.U.A.
)
Un Saludo.

=========================================
P:D:

Para añadir más signos de puntuación, los cuales son tomados como semilla para indicar que la palabra siguiente a esta será capitalizada.

situarse en la linea 11 de la clase

Código PHP:
if (preg_match("/^(.)*[\.\x0A]+$/"$subject)) 
Yo he agregado solamente el punto (\.) y el salto de linea (\x0A), puedes agregar los que consideres.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.