Değişken PHP kullanarak pozitif bir tamsayı olup olmadığını kontrol etmek kısa yoldur?

6 Cevap php

Ben kullanıcı girişi eğer pozitif bir tamsayı numarayı kontrol etmek istiyorum.

1    = true
+10  = true
.1   = false
-1   = false
10.5 = false


Just a positive number. 
No characters.
No special character.
No dot.
No minus sign.

Ben denedim is_int() function ama o bile pozitif tamsayılar false dönüyor. Bir string to int sorun var mı?

6 Cevap

Böyle bir şey çalışması gerekir. Bir tamsayı değeri döküm ve (biz eşitliğini kontrol ederken === PHP türü gözardı == yerine kullanmak gibi) orijinal formu ile karşılaştırın. Biz bir tam sayıdır bildiğiniz gibi Sonra biz> 0 olduğunu test edin. (İstediğiniz >= 0 olabilir olumlu tanımına bağlı olarak)

$num = "20";

if ( (int)$num == $num && (int)$num > 0 )

Try the native Filter function *

filter_var($value, FILTER_VALIDATE_INT, array(
    'options' => array('min_range' => 1)
));

* if you just want to make sure the input string consists of an arbitrary length digit sequence, use a regex with [0-9] or [\d+]

Examples with filter_var:

var_dump( filter_var(1, FILTER_VALIDATE_INT) ); // int(1)

var_dump( filter_var('1', FILTER_VALIDATE_INT) ); // int(1)

var_dump( filter_var('+10', FILTER_VALIDATE_INT) ); // int(10)

var_dump( filter_var(.1, FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var('.1', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var(-1, FILTER_VALIDATE_INT, 
    array('options' => array('min_range' => 1))) ); // bool(false)

var_dump( filter_var('-1', FILTER_VALIDATE_INT, 
    array('options' => array('min_range' => 1))) ); // bool(false)

var_dump( filter_var('2147483648', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var('0xFF', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var(0xFF, FILTER_VALIDATE_INT) ); // int(255)

Ben bu en iyi yolu olduğunu söyleyebilirim

if (is_int($num) && $num > 0)

int typecasting çok yavaş olarak.

Ben normal bir ifade kullanabilirsiniz. Çok basit bu konuda düşünüyorsanız. Eğer bir sayı değil, bir bütün pozitif bir tamsayı (eksi işareti ve bir dönem) yapmak istiyorsanız daha fazla noktalama işaretleri gerekir. Yani bu sadece sahip tek şey numaraları değeri 0-9 olmasını sağlar.

if(!ereg('^[0-9]+$', $value)) {
  $errors .= "This is not a positive whole number";
}

Emin belirli bir karakter miktarının yanı sıra daha az yapmak için orada başka bir bölümünü ekleyebilirsiniz. Umarım bu yardımcı olur.

kolay yoludur:

if intval($x) > 0 echo "true"

if (! preg_match ('/ ^ [0-9] + $ /', $ girdi)) {

Deprecated: Function ereg () önerilmemektedir