Jump to content


Photo

Remover Multiplos Espaços Consecutivos No Php


  • Faça o login para participar
6 replies to this topic

#1 ©arlos_five

©arlos_five

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Não informado

Posted 23/08/2005, 23:05

Olá a todos, é primeira vez que estou postando.
Queria saber se existe uma ação no PHP para remover multiplos espaços consecutivos, por exemplo, o Dreamweaver não permite que crie vários espaços, mesmo pressionando a tecla SPACE.

Seria assim o caso: Pretendo criar um sistema de cadastro de clientes e o cliente acidentalmente digita dois espaços em branco em seu nome completo no formulário, dai ele clica em Enviar, e o PHP irá tratar a variável e remover o excesso de espaços, e enfim enviar pro MySQL.

Este é o formulário:
form_index.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Cadastro de Clientes</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form name="form1" method="post" action="recebe_form_index.php">
  <h1>Formul&aacute;rio - Cadastro de Clientes</h1>
  <p>Nome: 
    <input name="form_nome" type="text" id="form_nome" size="30" maxlength="80">
    <br>
    E-mail: 
    <input name="form_email" type="text" id="form_email" size="30" maxlength="80">
    <br>
    <br>
    <input type="submit" name="Submit" value="Enviar">
  </p>
</form>
<p>&nbsp;</p>
</body>
</html>

Me falaram que devo usar o TRIM, mas parece que não tem efeito.

recebe_form_index.php
<?php
$titulo = "Fazendo cadastro";
include("config.php");

$nome = $_POST['form_nome'];
$email = $_POST['form_email'];

//Retirando espaços
$nome = trim($nome);
$email = trim($email);
$erro = 0;

//Verificar se há email cadastrado no BD
$RsVerifica = mysql_query("SELECT * FROM tblcad WHERE email = '$email'");
$mnr = mysql_num_rows($RsVerifica);

if ($mnr != 0) {
echo '<center><font style="color:#FF0000">E-mail já cadastrado em nosso banco de dados!</font>';
$erro++;
}

//Se não encontrar @
if (!eregi("@", $email)) {
echo '<center><font style="color:#FF0000">E-mail incorreto!</font>';
$erro++;
}

//Encontrar números
if (ereg("[0-9\()-.,:;*&¬!?|+}{/]", $nome)) {
echo '<center>><font style="color:#FF0000">Nome incorreto!</font>';
$erro++;
}

//Verificar se campo nome foi setado
if (empty($nome)) {
echo '<center><font style="color:#FF0000">Campo nome em branco!</font>';
$erro++;
}

if ($erro == 0) {
//Inserir no banco de dados se tudo se tudo for OK
$RsInserir = mysql_query("INSERT INTO tblcad (nome, email) VALUES ('$nome', '$email')");
echo '<center>Cadastro efetuado com sucesso!<br><br>
<b>Nome:&nbsp;</b>'.$nome.'<br>
<b>Email&nbsp;</b>'.$email.'';
}

?>
<html>
<head>
<title><?php echo "$titulo"; ?></title>
</head>

<body>
</body>
</html>

O código não gera erro nenhum, mas na hora visualizar no phpMyAdmin o campo "nome" da tabela "tblcad" mostra o excesso de espaços.

O que falta no meu exemplo?
Agradeço a quem puder me ajudar.

#2 Lucaswdm

Lucaswdm

    Lucas WDM

  • Usuários
  • 284 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:PHP

Posted 23/08/2005, 23:14

trim tira apenas do COMEÇO e do FIM da variavel, por isso não obteve efeito...

hum..

gambiarra(strreplace(" "," ",$variavel));

hehehehe

eu faria assim e colocaria o numero de espaços necessarios para cada verificacao...

VLW

Edição feita por: Lucaswdm, 23/08/2005, 23:15.

Lucas Mariano - Data2 Soluções para Internet
Idealizador :: Concurso #GatasdoTW
Belo Horizonte, MG

#3 ©arlos_five

©arlos_five

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Não informado

Posted 23/08/2005, 23:28

trim tira apenas do COMEÇO e do FIM da variavel, por isso não obteve efeito...

hum..

gambiarra(strreplace(" "," ",$variavel));

hehehehe

eu faria assim e colocaria o numero de espaços necessarios para cada verificacao...

VLW


Eu coloquei assim:

//Retirando espaços
$nome = str_replace(" "," ",$nome);
$email = str_replace(" "," ",$email);
$erro = 0;


E testei, mas continua preenchendo o excesso de espaços no MySQL.

Edição feita por: ©arlos_five, 23/08/2005, 23:28.


#4 victorpfm

victorpfm

    Expert

  • Usuários
  • 566 posts
  • Sexo:Masculino

Posted 23/08/2005, 23:52

http://guia-er.sf.net
http://www.php.net/preg-replace

#5 ©arlos_five

©arlos_five

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Não informado

Posted 24/08/2005, 00:27

Muito obrigado victorpfm, agora sim o código esta funcionando.

Eis o exemplo do trecho do arquivo:
recebe_form_index.php
//Retirando espaços
$nome = preg_replace('/\s\s+/', ' ', $nome);

//Retirando espaços no e-mail
$email = preg_replace('/\s\s+/', '', $email);

Edição feita por: ©arlos_five, 24/08/2005, 00:30.


#6 Klaus

Klaus

    @ ubuntu jaunty

  • Ex-Admins
  • 7924 posts
  • Sexo:Masculino
  • Localidade:127.0.0.1

Posted 24/08/2005, 07:39

Lembrando que, na (X)HTML, podem existir quantos espaços forem entre uma palavra e outra, como aqui, que só aparecerá um... (Clique no botão "Citar" acima para ver os espaços)

Claro, exceto se você estiver usando <pre>, <input />, <textarea>...
Klaus Paiva
Conheça também: Taperás

#7 victorpfm

victorpfm

    Expert

  • Usuários
  • 566 posts
  • Sexo:Masculino

Posted 24/08/2005, 13:27

Eu acho que em vez de:

preg_replace("/\s\s+/", "", $txt);


ficaria melhor:

preg_replace("/( +)/", " ", $txt);






1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq