mai
15
2009

Minicurso 5ª Parte: Funções para Tratamento de Strings

Olá Pessoal,

Estou meio sumido, eu sei… A vida tá uma correria só, e foi extremamente complicado atualizar o blog e manter minhas newsletters. Mas vamos retomar nosso curso online de PHP (e vamos até o fim, que eu já comecei a escrever os minicursos de WebStandards e SQL). A partir de agora eu vou dar um foco maior para o blog e buscar aproveitá-lo melhor, afinal, mesmo sem postar há um mês, o número de visitas aumentou consideravelmente (visitantes únicos), tenho recebido comentários e emails pedindo para voltar a ativa. Então, vamos que vamos!!!! :D

O assunto de hoje é tratamento de strings. O PHP possui uma série de funções para trabalhar com texto, e não pretendo esgotar o tema. Iremos abordar as principais funções que a linguagem nos fornece, e você pode consultar a documentação oficial do PHP sempre que precisar.

O PHP é uma linguagem case sensitive, ou seja, faz distinção entre letras maiúsculas e minúsculas. O que pode ser um problema quando precisamos comparar duas strings. Por exemplo, em um formulário de login é necessário comparar o usuário e senhas digitados com os valores correspondentes armazenados em um banco de dados. Digamos agora que o usuário tenha ativado o CAPS LOCK, em PHP o valor “TESTE123″ é diferente de “teste123″, por mais que a sintaxe seja a mesma. Ou seja, teremos um erro no login. Para evitar isso, temos duas funções que colocam uma string inteira para caixa baixa ou caixa alta: strtolower() e strtoupper(). Iremos utilizar o exercício de login e senha feito anteriormente:

LOGIN.PHP

1
2
3
4
5
<form action="validaLogin.php" method="post" id="form" name="form">
<label for="login">Login: <input type="text" name="login" id="login" /></label>
<label for="senha">Senha: <input type="password" name="senha" id="senha" /></label>
<button type="submit">LOGIN</button>
</form>

VALIDALOGIN.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$login = array("user01", "user02", "user03", "user04", "user05");
$senha = array("senha01", "senha02", "senha03", "senha04", "senha05");
//Calculo o tamanho do array $login
$tamArray = count($login);
//Crio uma variável auxiliar
$msg = FALSE;
//Uso um loop para percorrer o array - escolherei o FOR, mas você pode usar qualquer outro
for ($i = 0; $i < $tamArray; $i++) {
if ($_POST["login"] == $login[$i] && $_POST["senha"] == $senha[$i]) {
$msg = TRUE;
break;
}
}
//Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso)
if ($msg) {
echo "ok";
}
else {
echo "erro";
}
?>

Pelo código acima se eu digitar USER01, ainda que a senha esteja correta, será retornada uma mensagem de erro. Isso não é bom, afinal não importa se o usuário digita em caixa alta ou baixa, o importante é o valor digitado conferir com o armazenado no banco – array no nosso caso (principalmente para buscas). Para isso usamos as funções strtolower() ou strtoupper(), afinal elas convertem todos os caracteres de uma string para caixa baixa e caixa alta, respectivamente. Veja como ficaria o código:

VALIDALOGIN.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$login = array("user01", "user02", "user03", "user04", "user05");
$senha = array("senha01", "senha02", "senha03", "senha04", "senha05");
//Calculo o tamanho do array $login
$tamArray = count($login);
//Crio uma variável auxiliar
$msg = FALSE;
//Uso um loop para percorrer o array - escolherei o FOR, mas você pode usar qualquer outro
for ($i = 0; $i < $tamArray; $i++) {
//Converto ambas as strings para caixa baixa 
if (strtolower($_POST["login"]) == strtolower($login[$i]) && strtolower($_POST["senha"]) == strtolower($senha[$i])) {
$msg = TRUE;
break;
}
}
//Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso)
if ($msg) {
echo "ok";
}
else {
echo "erro";
}
?>

Em muitas ocasiões necessitamos de apenas um pedaço da string, sendo necessário retirar essa parte do texto completo. Para isso usamos a função substr() que admite os seguintes parâmetros: string a ser trabalhada, posição inicial da substring dentro da string maior, tamanho da substring. Agora vocês devem se perguntar: que raios é posição inicial da substring? Explicando: uma string é também conhecida como cadeia de caracteres, ou seja, dentro de um texto cada caractere corresponde a uma posição. Sim, como vocês devem estar visualizando, um texto acaba sendo entendido como um array de caracteres. Veja o exemplo a seguir: imaginem a string “Paulo Silva”. Dizemos que 0 (zero) é a posição inicial da string, correspondente a letra P; na posição 2 temos a letra u; na posição 4 temos a letra o. Uma substring que se inicie na posição 0 e tenha um comprimento de 5 caracteres irá retornar o nome Paulo. Ficou mais claro agora, né? Legal! Outra coisa importante: dentro de uma string, o espaço vazio é contado como um caracter válido, ou seja ocupa uma posição. Ao trabalhar com substrings devemos levar em consideração os espaços vazios, evitando erros desnecessários. Vejamos a função substr() em ação:

SUBSTR.PHP

1
2
3
4
5
6
7
8
<?php
//Declaro a string maior
$string = "João Paulo Rodrigues da Silva Mendes";
//Mando imprimir uma substring de 4 caracteres, iniciando a partir da posição 0
echo substr($string, 0, 4);
//Mando imprimir uma substring de 5 caracteres, iniciando a partir da posição 5
 echo substr($string, 5, 5);
?>

Para praticar, tentem imprimir todas partes do nome acima isoladamente, usando a função substring (será necessário extrair cinco substrings). Uma outra função útil para tratar strings, é a strlen() que retorna o tamanho de uma string. Por tamanho de uma string, nos referimos a quantidade de caracteres que ela possui. Se vamos tratar strings cujo tamanho nos é desconhecido, essa função é fundamental para evitarmos erros em nosso programa. Veja o código abaixo:

STRLEN.PHP

1
2
3
4
5
6
<?php
//Declaro a string maior
 $string = "João Paulo Rodrigues da Silva Mendes";
 //Mando imprimir o tamanho da string
echo strlen($string);
?>

2 Comentários »

  • Thiago Luna disse:

    Aeee, matéria nova!
    Estamos em movimento novamente.
    Vlw Mestre!
    Há braços.

  • Gilson disse:

    Parabéns, bem explicado!

    coloquei no favoritos e Voltarei + vezes.

    Tb acho que precisamos na web vê toda explicação esgotada sobre o assunto, isto é vê todas as funções nativas do php em um só lugar com a qualidade de explicação aqui escrita.

Assine o RSS dos comentários desse post. TrackBack URL


Comente

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com