drhouse 1 Denunciar post Postado Junho 7, 2010 Olá amigos, sei que o topico parece repetido mais devido a buscas e mais buscas na net não encontro algo que funcione na validação do campo titulo onde e somente aceito letras, números e espaco, vejá o codigo que estou usando e me diga o erro para ele não consegui verificar se o campo possui algo alem de Letras, números e espaco. // Verifica se o campo título está preenchido corretamente if ((!preg_match("([a-zA-Z0-9 ])", $titulo)) || (empty($titulo))){ $ac[] = htmlentities("Opa! Preencha o título corretamente deve conter somente letras e números."); } Se eu adicionar no campo: "#737 Teste (*78" ele vai passar como valido, não estou entendendo mais como fazer a verificação. Aguardo o retorno. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Junho 7, 2010 Se eu adicionar no campo: "#737 Teste (*78" ele vai passar como valido, não estou entendendo mais como fazer a verificação. Sim, passa como válido porque, de fato, #737, Teste(*78 e quaisquer outras combinações nesse sentido possuem, em seu conteúdo, letras e números. Procure utilizar o ^ para definir o início e o $ para definir o fim; <?php $str = 'João Batista Neto'; if ( preg_match( '/Neto/' , $str ) ){ echo 'A string "' , $str , '" contém a string "Neto"'; echo PHP_EOL; } if ( preg_match( '/^Neto$/' , $str ) ){ echo 'A string "' , $str , '" é exatamente "Neto"'; } A saída: A string "João Batista Neto" contém a string "Neto" Agora, se mudarmos a string para: $str = 'Neto'; A saída será: A string "Neto" contém a string "Neto" A string "Neto" é exatamente "Neto" Compartilhar este post Link para o post Compartilhar em outros sites
drhouse 1 Denunciar post Postado Junho 7, 2010 Olá João, fiz a modificação como informado veja exemplo no codigo abaixo, mais continua passando como valido qualquer conteudo digitado. // Verifica se o campo título está preenchido corretamente if ((preg_match("(^[a-zA-Z0-9 ]$)", $titulo)) || (empty($titulo))){ $ac[] = htmlentities("Opa! Preencha o título corretamente deve conter somente letras e números."); } Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Junho 7, 2010 <?php $titulos = array(); $titulos[] = 'Apenas letras'; $titulos[] = 'Esse tem 0utr@a$ coisas'; $titulos[] = 'Teste 3'; $titulos[] = 'WTF $@#%'; foreach ( $titulos as $titulo ){ if ( !empty( $titulo) && preg_match( '/^[\w\n\s]+$/i' , $titulo ) ){ echo 'O título: ' , $titulo , ' é válido.'; } else { echo $titulo , ' não pode'; } echo PHP_EOL; } Saída: O título: Apenas letras é válido. Esse tem 0utr@a$ coisas não pode O título: Teste 3 é válido. WTF $@#% não pode Compartilhar este post Link para o post Compartilhar em outros sites
drhouse 1 Denunciar post Postado Junho 8, 2010 João deu certinho obrigado amigo, so mais uma pergunta não está aceitando acentos, se conter acentos nas letras da como invalido como fazer para aceitar acentos, letras, numeros e espaco? Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Junho 8, 2010 Para evitar deixar a expressão de verificação muito complexa, utilize essas duas funções auxiliares: function is_utf8( $string ){ return preg_match( '%^(?: [\x09\x0A\x0D\x20-\x7E] | [\xC2-\xDF][\x80-\xBF] | \xE0[\xA0-\xBF][\x80-\xBF] | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} | \xED[\x80-\x9F][\x80-\xBF] | \xF0[\x90-\xBF][\x80-\xBF]{2} | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2} )*$%xs', $string ); } function removeAccents( $string ){ $utf8 = is_utf8( $string ); if ( !$utf8 ) $string = utf8_encode( $string ); $ret = preg_replace( array( //Maiúsculos '/\xc3[\x80-\x85]/', '/\xc3\x87/', '/\xc3[\x88-\x8b]/', '/\xc3[\x8c-\x8f]/', '/\xc3([\x92-\x96]|\x98)/', '/\xc3[\x99-\x9c]/', //Minúsculos '/\xc3[\xa0-\xa5]/', '/\xc3\xa7/', '/\xc3[\xa8-\xab]/', '/\xc3[\xac-\xaf]/', '/\xc3([\xb2-\xb6]|\xb8)/', '/\xc3[\xb9-\xbc]/', ), str_split( 'ACEIOUaceiou' , 1 ), $string ); return $ret; } Agora, verificando: <?php $titulos = array(); $titulos[] = 'Apenas letras'; $titulos[] = 'Esse tem 0utr@a$ coisas'; $titulos[] = 'Teste 3'; $titulos[] = 'WTF $@#%'; $titulos[] = 'Um título com acento'; $titulos[] = 'João Batista Neto'; foreach ( $titulos as $titulo ){ if ( !empty( $titulo) && preg_match( '/^[\w\n\s]+$/i' , removeAccents( $titulo ) ) ){ echo 'O título: ' , $titulo , ' é válido.'; } else { echo $titulo , ' não pode'; } echo PHP_EOL; } Saída: O título: Apenas letras é válido. Esse tem 0utr@a$ coisas não pode O título: Teste 3 é válido. WTF $@#% não pode O título: Um título com acento é válido. O título: João Batista Neto é válido. Compartilhar este post Link para o post Compartilhar em outros sites