Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.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.");
}<?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
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?
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.
>
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.
if ( preg_match( '/Neto/' , $str ) ){
if ( preg_match( '/^Neto$/' , $str ) ){
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"