Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

drhouse

[Resolvido] Somente letra e numero

Recommended Posts

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

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

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

<?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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.