Bir dizenin bir sayı php olup olmadığını kontrol edin. PHP'de sayısal parametreleri kontrol etme. PHP'de bir değişkenin tamsayı olup olmadığını kontrol etme

  • 03.11.2019

Şimdi site aktif olarak yeni bir bölüm başlatmak için çalışıyor. Ve bunun için bazı komut dosyaları yazarken, bir sayı için değişkenleri kontrol etmek gerekli hale geldi. Ve sadece bir sayı değil (sonuçta 1.5 de bir sayıdır), aynı zamanda bir tam sayıdır. Ve bu kontrolü bu şekilde yaptım.

PHP'de bir değişkenin tamsayı olup olmadığını kontrol etme

PHP'de bir sayının tamsayı olup olmadığını test etmek için normal bir ifade kullanacağız:

Buna göre, değişken bir tamsayı ise, ihtiyacımız olan eylemi gerçekleştiririz ve bunun tersi de geçerlidir.

JavaScript'te bir değişkenin tamsayı olup olmadığını kontrol etme

JavaScript'te işler biraz farklı ve burada kendi küçük fonksiyonumuzu yazmamız gerekiyor:

işlev numarası_tarama (sayı) (dönüş (sayı ^ 0) === sayı;)

ve zaten kontrol etmek için kullanın:

Burada da bir tamsayıya eşit bir değişkenle istenen eylem gerçekleştirilir ve bunun tersi de geçerlidir.

Yazardan: sizi selamlıyorum arkadaşlar. Bu yazıda, düzenli ifadelerin olanaklarını doğrudan incelemeye başlayacağız, PHP'deki preg_match () işleviyle tanışacağız ve ayrıca bir sayıyı kontrol etmek için ilk düzenli ifadeyi oluşturacağız.

Belki de bu makaleye, normal ifadelerin metinle çalışmak için çok güçlü bir araç olduğu gerçeğiyle başlamaya değer. Bildiğiniz gibi, düzenli ifadelerin yardımıyla bir metin dizisinde kelimenin tam anlamıyla her şeyi bulabiliriz. Ancak bu yetki kötüye kullanılmamalıdır. PHP'nin bize dizeler, türler vb. ile çalışmak için bir çok işlev sunduğunu unutmayın; bu işlevler, örneğin bir dizede belirli bir karakterin veya alt dizenin varlığını kontrol etmemize olanak tanır.

Bu nedenle, normal ifadeler kullanmadan bir sorunu çözmek mümkünse, normal ifadelerle çalışma işlevleri genellikle daha fazla kaynak gerektirdiğinden, bu fırsatı kullanmaya değer. Bu durumda, problem düzenli ifadeler olmadan çözülebilir. Örneğin, ctype_digit () işlevini kullanarak bir dizedeki tüm karakterlerin sayısal olup olmadığını kontrol edebilirsiniz.

Ancak makalede ortaya konan problemin şartlarına göre düzenli ifadeler kullanmamız gerekiyor, bu yüzden sorunu preg_match() işlevini kullanarak çözeceğiz. Bu işlev, bir dizeyi normal ifade kalıbına göre kontrol eder. Fonksiyonun 5 parametresi vardır ve bunlardan sadece ilk 2'si pratikte hemen hemen her zaman kullanılır.

Fonksiyonun ilk parametresi bir normal ifade kalıbı olacaktır. İkincisi, kontrol edilen dizedir. Bazen, arama sonuçlarını içeren bir dizi alacağımızı belirten üçüncü bir parametreye ihtiyaç duyulabilir.

İlk şablonumuzu oluşturalım. Şöyle görünebilir:

$ desen = "# ^ + $ #";

$ desen = "# ^ + $ #";

İlk bakışta anlaşılmaz ve biraz korkutucu görünebilir. Ancak, burada korkunç bir şey yok, şimdi analiz edeceğiz. Başlangıç ​​olarak, düzenli ifadeler, sözde özel karakterleri kapsamlı bir şekilde kullanır. meta karakterler. Şablonumuzda bunlardan epeyce var:

^ - satır meta karakterinin başlangıcı

$ - satır sonu meta karakteri

- karakter sınıfı meta karakterler

+ Bir niceleyicinin izlediği bir karakterin veya karakter grubunun 1 veya daha fazla oluşumunu gösteren bir niceleyicidir.

Peki ne elde ettik? Oluşturulan regex modelini nasıl okuyabilirsiniz? Ve şöyle okur:

tüm dize baştan sona doğrulanacak (meta karakterler ^ $)

dize yalnızca 0'dan 9'a kadar olan sayıları içerebilir ()

satır en az bir rakam (+) içermelidir

Şimdi şablonu çalışırken kontrol edelim.

Gördüğünüz gibi, normal ifade doğru çalışıyor. Altına yalnızca tamamen sayılardan oluşan dizeler sığar. Bu arada, regexr.com sitesinde de test yapıyorsanız ve metinde birden fazla satır varsa, şablon için şablonun çok satırlı çalışmasına izin verecek özel bir bayrak - m belirtilmelidir. Metin. Bu, sağ üst köşedeki bayraklar menü öğesinde yapılabilir.

Başlangıç ​​ve/veya bitiş meta karakterlerini kaldırırsak ne olacağına dikkat edin:

Şimdi tüm ipi doldurmuyoruz, sadece ipte bir şey arıyoruz. Sonuç olarak, üçüncü satırda sayılar bulundu, ancak sorun ifadesine göre bu satır bize uymuyor. Şimdi preg_match işlevini kullanalım ve satırların her birini ayrı ayrı kontrol edelim:

$ dizi = ["123", "deneme", "45ew45", "456"]; $ desen = "# ^ + $ #"; foreach ($ arr as $ item) (if (preg_match ($ pattern, $ item)) (echo "

Hat $ öğe sadece sayıları içerir

";) başka (yankı"

Hat $ öğe uygun değil

"; } }

$ dizi = ["123", "deneme", "45ew45", "456"];

$ desen = "# ^ + $ #";

foreach ($ arr as $ öğe) (

Örneğin, şu adresi alalım: http://example.com/price.php?product=859844&page=99.

Komut dosyası, ürün ürünü için mağazalardaki fiyatların bir listesini görüntüler, isteğe bağlı sayfa parametresi sayfa numarasını belirtir. Sayfa belirtilmemişse ve url şöyle görünüyorsa http://example.com/price.php?product=859844, ardından ilk sayfayı görüntüleriz.

PHP 5.2.0'dan önce sorun bu kadar basit bir şekilde çözülebilirdi.

// Doğal sayı olan bir parametre alma işlevi // $ dizi = parametre dizisi ($ GET veya $ POST), $ ad = parametre adı, // İşlev, parametre değerini döndürür veya parametre ise $ varsayılanını döndürür yok veya yanlış fonksiyon get_param_nat ($ dizi, $ isim, $ default = null) (if (! isset ($ dizi [$ isim])) return $ default; // Çok basit bir şekilde kontrol ediyoruz, parametreyi dönüştürüyoruz bir sayı, sonra bir dizgeye geri dön // Her şey yolundaysa, sonuçtaki dizgi $ val = $ dizi [$ name]; $ intval = intval ($ val); // Yük kontrolü parametresinin orijinal değeriyle eşleşmelidir aldığımız sayının sıfırdan büyük olması if (strval ($ intval)! = = $ val || $ intval< 1) return $default; return $intval; } // Проверяем параметр product if (($product = get_param_nat($_GET, "product")) === null) die("Product not found"); // Получаем номер страницы $page = get_param_nat($_GET, "page", 1);

5.2.0 sürümünden itibaren PHP, bir grup Filtre işlevine sahiptir: filter_var, filter_input, filter_var_array ve diğerleri. İşlevler, tamsayılar, kayan nokta sayıları, e - posta, ip - adresleri, url vb. için değişkenleri kontrol edebilir ve ayrıca belirtilen parametrelere göre dizeleri temizleyebilir.

Filter_input işlevini kullanarak kodu yeniden yazalım.

işlev get_param_nat ($ türü, $ adı, $ varsayılan = boş) ($ değer = filter_input ($ türü, FILTER_VALIDATE_INT, dizi ("min_range" => 1, "max_range" => PHP_INT_MAX)); // filter_input, filtreleme durumunda false döndürür başarısız veya değişken tanımsız ise null if ($ val === null || $ val === false) return $ default; return $ val;) // Ürün parametresini kontrol edin if (($ product = get_param_nat (INPUT_GET) , "ürün")) === null) die ("Ürün bulunamadı"); // Sayfa numarasını al $ page = get_param_nat (INPUT_GET, "page", 1);

Küçük bir test, hız açısından get_param_nat işlevinin iki varyantının pratik olarak aynı olduğunu ve örneğin bir sayfa belirtilmediği gibi bir parametrenin yokluğunda, ilk varyantın biraz daha hızlı çalışacağını göstermiştir.

Yani ne kullanacağınız size kalmış. Şahsen ilk işlevi kullanıyorum, bir şekilde bana daha yakın ve daha anlaşılır.

Ve sonunda küçük bir lirik arasöz. Örneğin, sayfasız ve sayfa = 1 olan arama motorları için sayfa tekrarından kaçınmak için, sayfanın head bölümünde kurallı url'yi belirtmenizi öneririm. Bunun gibi bir şey görünecek:

... "> ...