Ir para conteúdo

POWERED BY:

Arquivado

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

Gutto Faria

[Resolvido] Verificar se valor de string é número inteiro

Recommended Posts

Olá. Estou tentando verificar se o valor de uma string é numero inteiro, mas não encontrei nada que me ajude aqui no forum.

O que eu quero é o seguinte:

 

$quant = $_POST["quantidade"];
$teste = "065165132"; // certo
$teste2 = "16as321"; // errado
$teste3 = "132,16"; // errado
$teste4 = "16544.01" // errado

// FAZENDO A VERIFICAÇÃO, O ÚNICO QUE DARIA CERTO SERIA O $teste OU O $quant (caso $POST["quantidade"] fosse numero inteiro)

Tentei fazer com is_numeric(), mas ele reconhece numeros decimais. Também tentei com is_int(), mas se eu tento fazer o is_int($quant) ou is_int("01") nao funciona, so funciona assim: is_int(01).

 

Alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que confusão com tipos de dados amigo. Primeiro, no PHP, "065165132" não é um inteiro. Ele é uma string, pois está o delimitando com aspas. E mesmo se estivesse sem aspas, seria um inteiro octal (pois o primeiro algarismo é um zero (0)).

 

É justamente por isso que is_int() não "funciona", pois é uma string e não um inteiro. Da mesma forma que is_int("01") não é nem de longe um inteiro.

 

Tentei fazer com is_numeric(), mas ele reconhece numeros decimais.

Claro, pois is_numeric() retorna true mesmo se o número for uma string. Ele não se importa se é um inteiro ou um ponto flutuante, ele só quer saber se são números. Portanto ele reconhece números decimais, conhecidos no PHP como (double | real | float).

 

$quant = $_POST["quantidade"];
$teste = "065165132"; // certo
$teste2 = "16as321"; // errado
$teste3 = "132,16"; // errado
$teste4 = "16544.01" // errado

 

Se você der um var_dump() em todas essas variáveis, verá que TODAS são strings.

 

Alguma solução?

Começe estudando os tipos de dados do PHP. http://www.php.net/manual/pt_BR/language.types.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

$teste = "065165132"; // certo

// FAZENDO A VERIFICAÇÃO, O ÚNICO QUE DARIA CERTO SERIA O $teste OU O $quant (caso $POST["quantidade"] fosse numero inteiro)

Cuidado, o valor de teste é um octal, não um inteiro.

 

<?php
var_dump( 065165132 , 65165132 );

 

Saída:

int(13953626)
int(65165132)

Como pode ver, 065165132 e 65165132 são dois números distintos.

 

<?php
$testes = array(
'65165132',
'065165132',
'16as321',
'132,16',
'16544.01'
);

foreach ( $testes as $valor ){
printf( "%s %s um número inteiro\n" , $valor , preg_match( '/^[1-9][0-9]*$/' , $valor ) ? 'é' : 'não é' );
}

 

Saída:

65165132 é um número inteiro

065165132 não é um número inteiro

16as321 não é um número inteiro

132,16 não é um número inteiro

16544.01 não é um número inteiro

 

Você até pode mudar a expressão regular para: /^[0-9]+$/ e aceitar o 065165132 como inteiro em vez de octal, apenas não confunda os dois porque são diferentes.

 

;)

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.