Php ellenőrizze, hogy egy szám egész szám-e. Numerikus paraméterek ellenőrzése PHP-ben. Annak ellenőrzése, hogy egy változó egész szám-e a PHP-ben

02.04.2020 Tanácsot

A szerzőtől: Üdvözlet, barátok. Ebben a cikkben közvetlenül elkezdjük tanulmányozni a reguláris kifejezések képességeit, megismerkedünk a PHP preg_match() függvényével, és összeállítjuk az első reguláris kifejezés szám ellenőrzések.

Valószínűleg érdemes azzal a ténnyel kezdeni ezt a cikket, hogy a reguláris kifejezések nagyon hatékony eszközök a szöveggel való munkához. Amint azt már tudod, a reguláris kifejezések segítségével szó szerint bármit megtalálhatunk egy szövegtömbben. Ezzel a hatalommal azonban nem szabad visszaélni. Ne felejtsük el, hogy a PHP számos funkciót kínál számunkra a karakterláncokkal, típusokkal stb. való munkavégzéshez, amelyek lehetővé teszik például, hogy ellenőrizzük egy adott karakter vagy részkarakterlánc jelenlétét egy karakterláncban.

Ezért ha reguláris kifejezések használata nélkül is megoldható egy probléma, akkor érdemes élni ezzel a lehetőséggel, mivel a reguláris kifejezésekkel való munkavégzés függvényei általában erőforrásigényesebbek. Ebben az esetben a probléma reguláris kifejezések nélkül is megoldható. Például a ctype_digit() függvény segítségével ellenőrizheti, hogy egy karakterlánc minden karaktere numerikus-e.

De a cikkben feltett feladat feltételei szerint reguláris kifejezéseket kell használnunk, így a preg_match() függvény segítségével oldjuk meg a feladatot. Ez a funkció ellenőrzi a karakterláncot egy reguláris kifejezésmintával. A függvénynek 5 paramétere van, amelyek közül a gyakorlatban szinte mindig csak az első 2 használható.

A függvény első paramétere a reguláris kifejezés mintája lesz. A második az ellenőrzött karakterlánc. Néha szükségünk lehet egy harmadik paraméterre, amely megadásával kapunk egy tömböt a keresési eredményekkel.

Készítsük el az első sablonunkat. Így nézhet ki:

$minta = "#^+$#";

$pattern = "#^+$#" ;

Első pillantásra érthetetlennek és kissé ijesztőnek tűnhet. Azonban nincs itt semmi szörnyű, most megnézzük. Kezdjük azzal a ténnyel, hogy a reguláris kifejezéseket aktívan használják Különleges szimbólumok, ún metakarakterek. Elég sok van belőlük a sablonunkban:

^ — egy sor elejének metakarakter

$ - sorvégi metakarakter

- karakterosztály metakarakterei

A + egy kvantor, amely egy karakter vagy karaktercsoport 1 vagy több előfordulását jelöli, amelyet egy kvantor követ.

Szóval mit kaptunk? Hogyan lehet olvasni egy összeállított reguláris kifejezésmintát? És ez így szól:

a teljes karakterlánc érvényes lesz, az elejétől a végéig (metakarakterek ^$)

a sor csak 0 és 9 közötti számokat tartalmazhat ()

a sornak tartalmaznia kell legalább egy számjegyet (+)

Most nézzük meg a sablon működését.

Mint látható, a reguláris kifejezés megfelelően működik. Csak a teljes egészében számokból álló sorok férnek el alatta. Egyébként, ha a regexr.com webhelyen is tesztel, és egynél több sor van a szövegben, akkor meg kell adnia egy speciális jelzőt a sablonhoz - m, amely lehetővé teszi a sablon működését több soros szöveg. Ezt a jobb felső sarokban, a menüpontok zászlóin teheti meg.

Jegyezze meg, mi történik, ha eltávolítjuk a sor elején és/vagy végén lévő metakaraktereket:

Most nem a teljes sort érvényesítjük, hanem egyszerűen csak keresünk valamit a sorban. Ennek eredményeként a harmadik sorban számokat találtunk, bár a feladat feltételei szerint ez a sor nem felel meg nekünk. Most használjuk a preg_match függvényt, és ellenőrizzük az egyes sorokat egyenként:

$arr = ["123", "teszt", "45ew45", "456"]; $minta = "#^+$#"; foreach($arr mint $item)( if(preg_match($pattern, $item))( echo "

A $item karakterlánc csak számokat tartalmaz

"; )else( echo"

A $item sor nem megfelelő

"; } }

$arr = [ "123" , "teszt" , "45ew45" , "456" ] ;

$pattern = "#^+$#" ;

foreach ($arr mint $item) (

Vegyük például a következő címet: http://example.com/price.php?product=859844&page=99.

A szkript megjeleníti a termék termékének bolti árlistáját, az opcionális oldalparaméter pedig az oldalszámot adja meg. Ha az oldal nincs megadva, és az URL így néz ki: http://example.com/price.php?product=859844 , akkor az első oldalt jelenítjük meg.

Előtt PHP verziók 5.2.0 a probléma ilyen egyszerű módon is megoldható lenne.

// Függvény természetes szám paraméter lekérésére // $arr = paraméterek tömbje ($GET vagy $POST), $name = a paraméter neve, // A függvény a paraméter értékét adja vissza, vagy $default ha a paraméter hiányzik vagy hibás függvény get_param_nat($ arr, $name, $default=null) ( if (!isset($arr[$name])) visszatér $default; // Ellenőrizze egy nagyon egyszerű módon, konvertálja a paramétert egy számra, majd vissza egy karakterláncra // Ha minden rendben van, akkor a kapott karakterláncnak meg kell egyeznie a paraméter eredeti értékével $val = $arr[$name]; $intval = intval($val); // A terhelésnél ellenőrizzük, hogy a kapott szám nagyobb-e nullánál 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);

Az 5.2.0-s verziótól kezdve a Filter függvények egy csoportja jelent meg a PHP-ben: filter_var, filter_input, filter_var_array és még sok más. A függvények ellenőrizhetik az egész számokat, a lebegőpontos számokat, az e-maileket, az IP-címeket, az url-t stb., valamint törölhetik a karakterláncokat a megadott paraméterek szerint.

Írjuk át a kódot a filter_input függvény segítségével.

Függvény get_param_nat($type, $name, $default=null) ( $val = filter_input($type, FILTER_VALIDATE_INT, array("min_range" => 1, "max_range" => PHP_INT_MAX)); // A filter_input hamis értéket ad vissza szűréskor sikertelen, vagy null, ha a változó nem definiált if ($val === null || $val === false) return $default; return $val; ) // Ellenőrizze a termékparamétert if (($product = get_param_nat(INPUT_GET) , "termék")) === null) die("A termék nem található"); // Az oldalszám lekérése $page = get_param_nat(INPUT_GET, "page", 1);

Egy kis tesztelés azt mutatta, hogy a get_param_nat függvény két változatának működési sebessége közel azonos, és paraméter hiányában például nincs megadva a page, az első változat még valamivel gyorsabban is működik.

Tehát Ön dönti el, mit használ. Én személy szerint az első funkciót használom, ez valahogy közelebb és világosabb hozzám.

Nos, egy kis lírai kitérő a végére. Annak elkerülése érdekében, hogy a keresőmotorok megkettőzzék az oldalt, például oldal nélkül és page=1 esetén, azt javaslom, hogy az oldal fejrészében adja meg a kanonikus URL-t. Valahogy így fog kinézni:

...