is_numeric intval, ctype__digit .. onlara güvenebilirsiniz?

6 Cevap php

is_numeric intval, ctype__digit .. onlara güvenebilirsiniz?

ya da ben regex kullanmak zorunda mı?

function isNum($str) {
return (preg_match("/^[0-9]+$/", $str));
}

Siz ne düşünüyorsunuz? Ben aptal mıyım?

6 Cevap

Tüm is_numeric intval ve ctype_digit çok farklı şeyler.

(Kayar nokta veya tamsayı değeri ise true yani) değişkenin içeriğinin sayısal ise is_numeric söyleyecektir.

intval bir tamsayı değeri sayı bir dize dönüştürmek için çalışır

Bir dize sayısal karakter ama hiçbir şey (siz IsNum işlev olarak aynı kontrol yapacaktır) içeriyorsa ctype_digit söyleyecektir.

En iyi yaklaşım is_numeric doğrudur ve sonra setType hatları ($ myvalue, 'integer') veya intval ($ myvalue) boyunca bir şey kullanmak olmadığını kontrol etmek muhtemelen;

Ayrıca yeni filter functions kullanabilirsiniz.

if (!$var = filter_var($var, FILTER_VALIDATE_INT)) {
  die('Not an int!');
}

echo "Var has the value $var.\n";

Vb cli, web istemcisi, girdi filtreleme olduğunda kullanılır List of filters here.

Siz fonksiyonların iki tür adlandırılmış:

A Validator checks if the given value has the given characteristics and returns either true or false.
is_numeric, the ctype_* functions and your isNum function are validating functions as they just tell you if a value is valid or not.

A Filter changes the given value in such way that the new value has the given characteristics and thus will be valid.
intval and the filter_* functions are filtering functions as they always will return valid values that would pass a validator.

PHP konusunda uzman değilim, ama bu fonksiyonların bir somut bir anlayış kazanmak için bir veri güdümlü birim test yazıyorum kabul var. Eğer güvenilirliği hakkında belirsiz ve dokümantasyon belirsiz ise, o zaman hiçbir şey permütasyon ve beklenen çıkış 1000 test edebilirsiniz bir birim testi yener.

Gerçekten Hatta o kadar ben sadece bazı özel kenar durumlarda test etmek istediğinizi düşünün olarak gitmek zorunda değilsiniz. Sizin programlama becerileri ve derleyici burada en iyi arkadaşımsın. Yazdığınız programı onaylamak veya şüpheleri inkar edecek ya.

Ayrıca, her yöntem ne kadar sürer izlemek ve daha performanslı olduğunu görebilirsiniz bir bonus atmak.

Sadece bir düşünce.

Ben sadece intval kullanmak olmaz neden emin değilim. Intval irade (belki de sizin için gidiyoruz ne olsa?) Iken regex bile, tüm sonra, negatif sayılar için muhasebe değil.

Hatta sadece intval ile gizlice ezoterik kayan nokta "Sorunlar" bazı kaçınan, int döküm.

Docs izleyin. is_numeric her zaman kullanılabilir olması ve sadece size PHP ile bir sayı kabul edilebilir bir dize sahip olduğunu doğrular olacaktır. ctype_* işlevleri kapsamında biraz dar ama aynı zamanda her zaman mevcut olmalıdır.

Bir RegEx tür çekler için overkill, IMO, olduğunu.