php che controlla il valore per int. Convalida dei parametri numerici in PHP

Ora il sito sta lavorando attivamente al lancio di una nuova sezione. E durante la scrittura di alcuni script per esso, è diventato necessario controllare le variabili per un numero. E non solo per un numero (dopo tutto, anche 1,5 è un numero), ma per un numero intero. Ed ecco come ho fatto questo controllo.

Verifica se una variabile è un numero intero in PHP

Per verificare se un numero è un numero intero in PHP, usiamo un'espressione regolare:

Di conseguenza, se la variabile è un numero intero, eseguiamo l'azione di cui abbiamo bisogno e viceversa.

Verifica se una variabile è un numero intero in JavaScript

In JavaScript, le cose sono un po' diverse, e qui dobbiamo scrivere la nostra piccola funzione:

Funzione number_scan(num) ( return (num ^ 0) === num; )

e lo uso già per la verifica:

funzione numero_scan(num) ( return (num ^ 0) === num; ) var numero = "1.3"; if(number_scan(number)) ( // Azione se il numero è un numero intero ) else ( // Azione se il numero è una frazione o la variabile non è affatto un numero )

Anche qui, con una variabile uguale a un numero intero, viene eseguita l'azione che ti serve e viceversa.

Ad esempio, prendi questo indirizzo: http://example.com/price.php?product=859844&page=99 .

Lo script visualizza un elenco di prezzi nei negozi per il prodotto product, il parametro page facoltativo specifica il numero di pagina. Se la pagina non è specificata e l'URL è simile a http://example.com/price.php?product=859844 , eseguiamo il rendering della prima pagina.

Prima di PHP 5.2.0, il problema poteva essere risolto in questo modo semplice.

// Funzione per ottenere un parametro che è un numero naturale // $arr = array di parametri ($GET o $POST), $name = nome parametro, // La funzione restituisce il valore del parametro, o $default se il parametro è assente o errato function get_param_nat($arr, $name, $default=null) ( if (!isset($arr[$name])) return $default; // Verifica in un modo molto semplice, converti il ​​parametro in un numero, quindi di nuovo in una stringa // If va tutto bene, quindi ricevuta Questa stringa deve corrispondere al valore iniziale del parametro $val = $arr[$name]; $intval = intval($val); // Controlla se il numero è maggiore di zero if (strval($intval) !== $val || $intval< 1) return $default; return $intval; } // Проверяем параметр product if (($product = get_param_nat($_GET, "product")) === null) die("Product non trovato"); // Ottieni il numero di pagina $page = get_param_nat($_GET, "page", 1);

A partire dalla versione 5.2.0, in PHP è apparso un gruppo di funzioni Filter: filter_var, filter_input, filter_var_array e molte altre. Le funzioni possono controllare le variabili per numeri interi, numeri in virgola mobile, e-mail, indirizzi IP, url, ecc., nonché stringhe chiare in base a determinati parametri.

Riscriviamo il codice usando la funzione filter_input.

Funzione 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 restituisce false se il filtraggio fallisce, o null se la variabile non è definita if ($val === null || $val === false) return $default; return $val; ) // Controlla il parametro del prodotto se (($prodotto = get_param_nat(INPUT_GET, "prodotto")) === null) die("Prodotto non trovato"); // Ottieni il numero di pagina $page = get_param_nat(INPUT_GET, "page", 1);

Un piccolo test ha mostrato che le due versioni della funzione get_param_nat sono quasi le stesse in termini di velocità, e se non ci sono parametri, per esempio, la pagina non è specificata, la prima versione funzionerà anche un po' più velocemente.

Quindi sta a te decidere cosa usare. Uso personalmente la prima funzione, è in qualche modo più vicina e comprensibile per me.

Bene, una piccola digressione lirica alla fine. Per evitare la duplicazione delle pagine per i motori di ricerca, ad esempio senza pagina e con pagina=1, ti consiglio di indicare l'url canonico nella sezione head della pagina. Sarà simile a questo:

...