PHP verifica dacă un număr este un întreg. Validarea parametrilor numerici în PHP. Verificarea dacă o variabilă este un număr întreg în PHP

02.04.2020 Sfat

De la autor: Salutări, prieteni. În acest articol, vom începe direct să studiem capacitățile expresiilor regulate, să ne familiarizăm cu funcția preg_match() în PHP și, de asemenea, să compunem primul expresie uzuala verificări de număr.

Probabil că merită să începeți acest articol cu ​​faptul că expresiile regulate sunt un instrument foarte puternic pentru a lucra cu text. După cum știți deja, cu ajutorul expresiilor regulate putem găsi literalmente orice într-o serie de text. Cu toate acestea, o astfel de putere nu trebuie abuzată. Nu uitați că PHP ne oferă o mulțime de funcții de lucru cu șiruri, tipuri și așa mai departe, care ne permit să verificăm, să zicem, prezența unui anumit caracter sau subșir într-un șir.

Prin urmare, dacă este posibil să rezolvați o problemă fără a utiliza expresii regulate, atunci merită să folosiți această oportunitate, deoarece funcțiile pentru lucrul cu expresii regulate necesită, de obicei, mai multe resurse. În acest caz, problema poate fi rezolvată fără expresii regulate. De exemplu, puteți verifica dacă toate caracterele dintr-un șir sunt numerice folosind funcția ctype_digit().

Dar conform condițiilor sarcinii prezentate în articol, trebuie să folosim expresii regulate, așa că vom rezolva sarcina folosind funcția preg_match(). Această funcție verifică un șir cu un model de expresie regulată. Funcția are 5 parametri, dintre care în practică doar primii 2 sunt aproape întotdeauna utilizați.

Primul parametru al funcției va fi modelul expresiei regulate. Al doilea este șirul care este verificat. Uneori este posibil să avem nevoie de un al treilea parametru, specificând care vom obține o matrice cu rezultatele căutării.

Să creăm primul nostru șablon. Poate arăta astfel:

$pattern = "#^+$#";

$pattern = "#^+$#" ;

La prima vedere poate părea de neînțeles și oarecum înfricoșător. Cu toate acestea, nu este nimic groaznic aici, acum ne vom uita la asta. Să începem cu faptul că expresiile regulate sunt folosite în mod activ Simboluri speciale, așa-zisul metacaracterele. Există destul de multe în șablonul nostru:

^ — metacaracter pentru începutul unei linii

$ - metacaracter de sfârșit de linie

- metacaracterele clasei de caractere

+ este un cuantificator care denotă 1 sau mai multe apariții ale unui caracter sau grup de caractere urmate de un cuantificator.

Deci, ce am primit? Cum poți citi un model de expresie regulată compusă? Și se citește așa:

întregul șir va fi validat, de la început până la sfârșit (metacaractere ^$)

linia poate conține numai numere de la 0 la 9 ()

linia trebuie să conțină cel puțin o cifră (+)

Acum să verificăm șablonul în acțiune.

După cum puteți vedea, expresia regulată funcționează corect. Sub ea se potrivesc numai linii formate în întregime din numere. Apropo, dacă testați și pe site-ul regexr.com și există mai multe rânduri în text, atunci trebuie să specificați un steag special pentru șablon - m, care va permite șablonului să funcționeze cu multi- text de linie. Puteți face acest lucru în colțul din dreapta sus, steagurile elementelor de meniu.

Rețineți ce se întâmplă dacă eliminăm metacaracterele de început și/sau de sfârșit de linie:

Acum nu validăm întreaga linie, ci pur și simplu căutăm ceva în linie. Ca urmare, s-au găsit numere în a treia linie, deși, conform condițiilor problemei, această linie nu ni se potrivește. Acum să folosim funcția preg_match și să verificăm fiecare dintre linii în mod individual:

$arr = ["123", "test", "45ew45", "456"]; $pattern = "#^+$#"; foreach($arr ca $articol)( if(preg_match($model, $articol))( echo "

Șirul $item conține doar numere

"; )else( ecou "

Linia $item nu este potrivită

"; } }

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

$pattern = "#^+$#" ;

foreach ($arr ca $articol) (

De exemplu, luați următoarea adresă: http://example.com/price.php?product=859844&page=99.

Scriptul afișează o listă de prețuri în magazine pentru produsul produs; parametrul opțional de pagină specifică numărul paginii. Dacă pagina nu este specificată și adresa URL arată ca http://example.com/price.php?product=859844 , atunci vom afișa prima pagină.

Inainte de versiuni PHP 5.2.0 problema ar putea fi rezolvată într-un mod atât de simplu.

// Funcție pentru obținerea unui parametru care este un număr natural // $arr = matrice de parametri ($GET sau $POST), $nume = numele parametrului, // Funcția returnează valoarea parametrului sau $default dacă parametrul lipsește sau funcția incorectă get_param_nat($ arr, $name, $default=null) ( if (!isset($arr[$name])) return $default; // Verificați într-un mod foarte simplu, convertiți parametru la un număr, apoi înapoi la un șir // Dacă totul este bine, atunci șirul rezultat trebuie să se potrivească cu valoarea inițială a parametrului $val = $arr[$nume]; $intval = intval($val); // Pentru încărcare, verificăm dacă numărul primit este mai mare decât zero dacă (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);

Începând cu versiunea 5.2.0, în PHP a apărut un grup de funcții de filtrare: filter_var, filter_input, filter_var_array și multe altele. Funcțiile pot verifica variabile pentru numere întregi, numere în virgulă mobilă, e-mail, adrese IP, url etc. și, de asemenea, șterge șiruri în funcție de parametrii specificați.

Să rescriem codul folosind funcția filter_input.

Funcția 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 returnează false dacă se filtrează eșuat, sau null dacă variabila este nedefinită dacă ($val === null || $val === false) return $implicit; return $val; ) // Verificați parametrul produsului dacă (($product = get_param_nat(INPUT_GET) , "produs")) === null) die ("Produsul nu a fost găsit"); // Obține numărul paginii $page = get_param_nat(INPUT_GET, "page", 1);

O mică testare a arătat că viteza de funcționare a celor două variante ale funcției get_param_nat este aproape aceeași, iar în absența unui parametru, de exemplu, pagina nu este specificată, prima variantă va funcționa și mai repede.

Deci, depinde de tine să decizi ce să folosești. Eu personal folosesc prima funcție; este cumva mai aproape și mai clar de mine.

Ei bine, o mică digresiune lirică la final. Pentru a evita duplicarea paginii pentru motoarele de căutare, de exemplu, fără pagină și cu page=1, recomand să specificați url-ul canonic în secțiunea head a paginii. Va arata cam asa:

...