Bir dizenin gerçek bir PHP tamsayı türünün geçerli bir temsili olup olmadığını gerçekten bilmek istiyorsanız ...
in_array($string, array_map('strval', range(PHP_INT_MIN, PHP_INT_MAX)), true)
Bununla birlikte, set çok büyük olduğundan çalıştırmak mümkün değildir (bu durumda belleğe sığmaz, bunun yerine döngü yaparsanız çok fazla CPU döngüsü sürecektir).
Belki dize karşılaştırması ile ikili bir arama yapabilirsiniz, ancak daha iyi yollar vardır.
En basit varlık:
strlen($string) <= max(strlen((string)PHP_INT_MIN), strlen((string)PHP_INT_MAX)) && $string === (string)(int)$string
Buna yaklaşmanın bazı alışılmadık yolları vardır:
is_int(array_keys([$string => null])[0])
Ayrıca dize karşılaştırması yapabilirsiniz, ancak yine de ctype_digit gibi şeyleri yapmanız, uzunluğun makul olduğunu kontrol etmeniz (ctype_digit gibi şeyler yapmadan önce CPU'yu boşa harcamayın) ve negatif sayılar için garip bir işlem yapmanız gerekir.
O filter_var Not değil bir dize gerçekten bir PHP tamsayı temsil olduğunu assert doğru. Bir lider + ve çevresindeki beyaz alana izin verecektir.
Dahili olarak PHP, katı karşılaştırma için "_zend_handle_numeric_str" işlevini kullanır, ancak bunu doğrudan hiçbir yerde göstermez, bu nedenle dizi anahtarlarını kullanarak hile yapar (bu, bir PHP tamsayısının temsili olan herhangi bir dizeyi bir PHP tamsayısına dönüştürmek için kullanır).
PHP ve ikili ikili dönüşüm istiyorsanız bu yaklaşım almaktır.
Herkes bunu istemeyebilir ve kullanıcı girdilerinin işlenmesi söz konusu olabilir. filter_var bunun için çok kötü değildir ve çoğu durumda PHP'ye yeni başlayanlar için oldukça güvenli olacaktır.
Bir uzunluk kontrolü, ctype_digit ve daha sonra bir aralıktaki dönüştürülmüş değer kontrolü de kullanıcı girişi için oldukça sağlamdır. Daha karmaşık şemalar kırpma veya normal ifade isteyebilir.
Burada bu konuda birçok cevap veren sorun, soru belirsiz olsa da cevapların olmaması gerektiğidir. Bir çözüm önerecekseniz, tam olarak ne olacağını ve ne beklemeyeceğinizi açıklayabilmelisiniz. Bu olmadan, bir yanıtın bir soru ile eşleşip eşleşmediğini veya güvenli olup olmadığını söylemek mümkün değildir. PHP kılavuzu her zaman yardımcı olmaz çünkü sağladığı ilgili yöntemlerin her biri için tüm uyarıları açıklamaz. Ctype_digit ve is_int gibi şeylerin güvenilirliği ve güvenilirliği kolaydır ancak is_numeric, filter_var ve hokkabazlık (+ $ var) veya döküm (intval / floatval) özellikleri yeterince belgelenmemiştir.
Bu sizin için PHP fudge. Dizeleri tamsayı olarak, tutarsızlıklar olarak yorumlamak için sayısız şemaya sahiptir. Bir tam sayı dizesini doğrulamanın en katı yöntemi doğrudan kullanıcıya maruz kalmaz.