Converter/formatar Campo Do Tipo ‘Nome’ Em Maiúsculas…

Sendo básico nestas andanças, tenho provavelmente uma dúvida ainda mais básica mas, como diz o ditado, quem não sabe é como quem não vê. Vamos à questão,

-> Utilizo um ‘form’ com o campo texto do tipo ‘Nome’ e quero validá-lo de forma que ao introduzir o respectivo nome este se converta/formate em maiúsculas, independente da forma como for introduzido.

Se escrever ‘FerNAndo António coimbra’, que este seja transformado em ‘FERNANDO ANTONIO COIMBRA’ (por exemplo). Ou, em alternativa, também me servia que apenas a primeira letra de cada palavra do nome fosse formatada em maiúsculas, do tipo ‘Fernando Antonio Coimbra’.

Antecipadamente grato pela ajuda que possa surgir…

OBRIGADO

Supondo que você queria modificar o formato do campo antes de salvar no banco de dados.

Adicione a classe WString abaixo na pasta protected/helpers





<?php


define('MB_STRING', (int) function_exists('mb_get_info'));


class WString

{


  /**

   * Default string encoding for the application.

   * @return string

   */

  public static function encoding()

  {

    return 'utf-8';

  }


  /**

   * Convert a string to title case (ucwords equivalent).

   * @param  string  $value

   * @return string

   */

  public static function title($value)

  {

    if (MB_STRING) {

        return mb_convert_case($value, MB_CASE_TITLE, static::encoding());

    }


    return ucwords(strtolower($value));

  }


  /**

   * Convert a string to lowercase.

   * @param  string  $value

   * @return string

   */

  public static function lower($value)

  {

    return (MB_STRING) ? mb_strtolower($value, static::encoding()) : strtolower($value);

  }


  /**

   * Convert a string to uppercase.

   * @param  string  $value

   * @return string

   */

  public static function upper($value)

  {

    return (MB_STRING) ? mb_strtoupper($value, static::encoding()) : strtoupper($value);

  }


}

No arquivo de configuração da sua aplicação adicione:





...

'import'=>array(

  ...

  'application.helpers.*', // adicionar esta linha

  ...

 ),

 ...



[size="2"]Agora no seu modelo adicione:[/size]

[size="2"]





<?php 




public function beforeSave()

{

  // Convert String para formato 'Aaaaaa Bbbbbb';

  $this->nome = WString::title($this->nome);

  

  // Convert String para formato 'AAAA BBBB';

  //$this->nome = WString::upper($this->nome);

  

  return parent::beforeSave();

}

[/size]

Master,

Se você quizer complementar a class do Wanderson, tem outra função que você pode adicionar:


function static normaliza($nome) {

    $arrayNome = explode(" ", $nome); //Retorna uma matriz de strings da variavel nome, separando pelos espacos

    $tamanhoArray = count($arrayNome);  //Conta a quantidade de elementos do array

    $arrayConectivos = array('', 'da', 'de', 'di', 'do', 'du', 'das', 'dos', 'e');

    $nomeNormalizado = "";


    for ($cont = 0; $cont < $tamanhoArray; $cont++) {

        $temp = $arrayNome[$cont];

        $temp = mb_strtolower($temp, static::encoding());


        if (array_search($temp, $arrayConectivos) == null)

            $nomeNormalizado .= ucfirst($temp) . " ";

        else

            $nomeNormalizado .= $temp . " ";

    }

    return(trim($nomeNormalizado));

}

Essa função não inclui algumas palavras que compõe o sobre nome, o title() usa mb_convert_case() do PHP convertando todas a palavras, até o "Da/De/Di/Do/Du" (Fulano Da Silva).

Boa [size=2]observação [/size][size=2]Newerton.[/size]

[size=2]

[/size]

UHAU, espectáculo… funcionou à primeira. Optei por colocar a totalidade do nome em maiúsculas.

Confesso que a dica do ‘Wanderson’ foi fácil de adicionar. Quanto à sugestão do ‘Newerton’, parecendo-me interessante para a distinção das palavras ‘de, da etc.’ do nome, em concreto - para o primeiro tipo de opção, não consegui implementar.

Tentei colocar o código no model, no ficheiro novo 'helpers/WString.php, entre outras tentativas e não vi o resultado. Culpa da minha ignorância, certamente.

Desde já, o meu sincero agradecimento… Vocês são GRANDES!!!

Master,

Se não me engano, falto o ‘public’ na função.

Antes:


function static normaliza($nome) {

Depois:


public function static normaliza($nome) {

Não sei qual versão do PHP está usando, se a função não for publica, você não consegue visualizar os resultados.