Php provjerava da li je broj cijeli broj. Validacija numeričkih parametara u PHP-u. Provjera je li varijabla cijeli broj u PHP-u

02.04.2020 Savjet

Od autora: Pozdrav prijatelji. U ovom ćemo članku izravno početi proučavati mogućnosti regularnih izraza, upoznati se s funkcijom preg_match() u PHP-u i također sastaviti prvi regularni izraz provjere broja.

Vjerojatno je vrijedno započeti ovaj članak činjenicom da su regularni izrazi vrlo moćan alat za rad s tekstom. Kao što već znate, uz pomoć regularnih izraza možemo pronaći doslovno bilo što u nizu teksta. Međutim, takvu moć ne treba zlorabiti. Ne zaboravite da nam PHP nudi mnoštvo funkcija za rad s nizovima, tipovima i tako dalje, koje nam omogućuju provjeru, recimo, prisutnosti određenog znaka ili podniza u nizu.

Stoga, ako je moguće riješiti problem bez korištenja regularnih izraza, onda je vrijedno iskoristiti ovu priliku, jer funkcije za rad s regularnim izrazima obično zahtijevaju više resursa. U ovom slučaju problem se može riješiti bez regularnih izraza. Na primjer, pomoću funkcije ctype_digit() možete provjeriti jesu li svi znakovi u nizu numerički.

Ali prema uvjetima zadatka postavljenog u članku, moramo koristiti regularne izraze, pa ćemo zadatak riješiti pomoću funkcije preg_match(). Ova funkcija provjerava niz prema uzorku regularnog izraza. Funkcija ima 5 parametara, od kojih se u praksi gotovo uvijek koriste samo prva 2.

Prvi parametar funkcije bit će uzorak regularnog izraza. Drugi je niz koji se provjerava. Ponekad nam može trebati treći parametar koji određuje koji ćemo niz dobiti s rezultatima pretraživanja.

Kreirajmo naš prvi predložak. Može izgledati ovako:

$uzorak = "#^+$#";

$uzorak = "#^+$#" ;

Na prvi pogled može izgledati neshvatljivo i pomalo zastrašujuće. Međutim, ovdje nema ništa strašno, sada ćemo to pogledati. Počnimo s činjenicom da se regularni izrazi aktivno koriste Posebni simboli, tzv metaznakovi. Ima ih dosta u našem predlošku:

^ — metaznak za početak retka

$ - metaznak kraja retka

- metakarakteri klase znakova

+ je kvantifikator koji označava 1 ili više pojavljivanja znaka ili grupe znakova nakon kojih slijedi kvantifikator.

Dakle, što smo dobili? Kako možete pročitati sastavljeni uzorak regularnog izraza? A glasi ovako:

cijeli niz će biti potvrđen, od početka do kraja (metakarakteri ^$)

linija može sadržavati samo brojeve od 0 do 9 ()

red mora sadržavati barem jednu znamenku (+)

Sada provjerimo predložak na djelu.

Kao što vidite, regularni izraz radi ispravno. Ispod njega stanu samo linije koje se u potpunosti sastoje od brojeva. Usput, ako također testirate na web mjestu regexr.com i postoji više od jednog retka u tekstu, tada trebate navesti posebnu oznaku za predložak - m, koji će predlošku omogućiti rad s višestrukim red teksta. To možete učiniti u gornjem desnom kutu, zastavicama stavki izbornika.

Imajte na umu što se događa ako uklonimo metaznakove početka i/ili kraja retka:

Sada ne validiramo cijelu liniju, već jednostavno tražimo nešto u liniji. Kao rezultat toga, brojevi su pronađeni u trećem retku, iako nam prema uvjetima problema ovaj red ne odgovara. Sada upotrijebimo funkciju preg_match i provjerimo svaku liniju pojedinačno:

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

$item niz sadrži samo brojeve

"; )else( echo "

Redak $item nije prikladan

"; } }

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

$uzorak = "#^+$#" ;

foreach ($arr kao $item) (

Na primjer, uzmite ovu adresu: http://example.com/price.php?product=859844&page=99.

Skripta prikazuje popis cijena u trgovinama za proizvod proizvoda; izborni parametar stranice navodi broj stranice. Ako stranica nije navedena, a url izgleda kao http://example.com/price.php?product=859844 , prikazujemo prvu stranicu.

Prije PHP verzije 5.2.0 problem bi se mogao riješiti na tako jednostavan način.

// Funkcija za dobivanje parametra koji je prirodni broj // $arr = niz parametara ($GET ili $POST), $name = naziv parametra, // Funkcija vraća vrijednost parametra ili $default ako parametar nedostaje ili je netočna funkcija get_param_nat($ arr, $name, $default=null) ( if (!isset($arr[$name])) return $default; // Provjerite na vrlo jednostavan način, pretvorite parametar u broj, zatim natrag u niz // Ako je sve u redu, tada rezultirajući niz mora odgovarati izvornoj vrijednosti parametra $val = $arr[$name]; $intval = intval($val); // Za učitavanje, provjeravamo da je broj koji smo dobili veći od nule 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);

Počevši od verzije 5.2.0, skupina funkcija filtera pojavila se u PHP-u: filter_var, filter_input, filter_var_array i nekoliko drugih. Funkcije mogu provjeravati varijable za cijele brojeve, brojeve s pomičnim zarezom, e‑poštu, ip‑adrese, url itd. te također brisati nizove prema navedenim parametrima.

Napišimo ponovno kod pomoću funkcije filter_input.

Funkcija get_param_nat($type, $name, $default=null) ( $val = filter_input($type, FILTER_VALIDATE_INT, array("min_range" => 1, "max_range" => PHP_INT_MAX)); // filter_input vraća false ako se filtrira nije uspio, ili null ako je varijabla nedefinirana if ($val === null || $val === false) return $default; return $val; ) // Provjerite parametar proizvoda if (($product = get_param_nat(INPUT_GET) , "proizvod")) === null) die("Proizvod nije pronađen"); // Dobivanje broja stranice $page = get_param_nat(INPUT_GET, "stranica", 1);

Malo testiranje pokazalo je da je brzina rada dviju varijanti funkcije get_param_nat gotovo identična, a u nedostatku parametra, npr. nije navedena stranica, prva varijanta će raditi čak i nešto brže.

Dakle, na vama je da odlučite što ćete koristiti. Ja osobno koristim prvu funkciju, nekako mi je bliža i jasnija.

Pa, mala lirska digresija za kraj. Kako biste izbjegli dupliciranje stranice za tražilice, na primjer, bez stranice i sa page=1, preporučujem da navedete kanonski url u zaglavlju stranice. Izgledat će otprilike ovako:

...