Come verificare se tutti i caratteri in una stringa sono cifre

Per verificare che i parametri siano numeri interi usiamo il metodo con `preg_match()` che è piuttosto efficiente e soddisfano la maggior parte dei casi in cui hai bisogno di validare input dall'URL.

Tuttavia, ci sono alternative che possono risultare più semplici e performanti, a seconda del contesto e di quanto siano rigidi i requisiti di validazione.

Quindi come fare?

 

 

 

 

-

 

Questo codice utilizza preg_match() per validare degli interi:

$id_listaGet    = $_GET['l'];
$id_filialeGet  = $_GET['t'];

if ( preg_match( '/^\d+/', $id_filialeGet, $matches ) ) {
​​​​​​​     $idFiliale = $matches[ 0 ];
     echo "Le prime cifre sono: " . $primeCifre; }
else {
   header( "location: error/404" ); // non sono cifre

}

 

Come gia detto il metodo risulta già efficiente per la convalida, ma esistono alternative che possono risultare più semplici e performanti, a seconda del contesto e di quanto siano rigidi i requisiti di validazione.

Ecco alcune alternative per verificare se una stringa rappresenta un numero intero:

1. Utilizzo di `ctype_digit()`

Se stai lavorando solo con numeri interi non negativi, `ctype_digit()` è un'opzione molto efficiente.
Questa funzione verifica se tutti i caratteri in una stringa sono cifre:

//php :: ctype_digit()

$id_listaGet = $_GET['l'];
$id_filialeGet = $_GET['t'];

if (ctype_digit($id_filialeGet)) {
    $idFiliale = $id_filialeGet;
} else {
    header("location: error/404");
    exit;
}

 

Vantaggi:
- Più semplice e leggibile rispetto a `preg_match()`.
- È più veloce di una regex perché non richiede la compilazione e l'esecuzione di un'espressione regolare.

Limiti:
- Funziona solo per numeri interi non negativi (non riconosce numeri negativi o decimali).
 

2. Utilizzo di `filter_var()`
Un'altra alternativa è `filter_var()` con il filtro `FILTER_VALIDATE_INT`.
Questo è utile se vuoi controllare anche numeri interi negativi o se vuoi essere sicuro che il numero sia rappresentato correttamente come un intero (e.g., evitare numeri fuori intervallo).

// php :: filter_var()

$id_listaGet = $_GET['l'];
$id_filialeGet = $_GET['t'];

if (filter_var($id_filialeGet, FILTER_VALIDATE_INT) !== false) {
    $idFiliale = (int)$id_filialeGet;
} else {
    header("location: error/404");
    exit;
}

 

Vantaggi:
- Può validare numeri interi anche negativi.
- Più flessibile in termini di validazione (puoi aggiungere ulteriori opzioni con parametri).

Limiti:
- Potrebbe risultare leggermente meno leggibile rispetto a `ctype_digit()` per validazioni semplici.

 

3. Controllo manuale con `is_numeric()`.
Se ti serve maggiore flessibilità per gestire sia numeri interi che decimali, `is_numeric()` può essere usato. Tuttavia, se stai lavorando solo con interi, potrebbe essere meno specifico.

// php :: is_numeric().
$id_listaGet = $_GET['l'];
$id_filialeGet = $_GET['t'];

if (is_numeric($id_filialeGet) && (int)$id_filialeGet == $id_filialeGet) {
    $idFiliale = (int)$id_filialeGet;
} else {
    header("location: error/404");
    exit;
}

Vantaggi:
- Può validare numeri sia interi che decimali.
- Semplice da usare.

Limiti:
- Potrebbe accettare valori che non sono strettamente interi (come numeri decimali o rappresentazioni scientifiche), quindi dovresti aggiungere ulteriori controlli.

 

In conclusione

  • Se vuoi validare solo numeri interi non negativi**, `ctype_digit()` è il metodo più efficiente e semplice.
  • Se hai bisogno di supportare numeri interi negativi**, usa `filter_var()` con `FILTER_VALIDATE_INT`.
  • Se vuoi un controllo più ampio che copre anche decimali**, potresti considerare `is_numeric()`.

In generale, l'efficienza del tuo approccio dipenderà dalle esigenze specifiche della tua applicazione, ma in situazioni standard, `ctype_digit()` o `filter_var()` tendono a essere le soluzioni più performanti e pulite.




Lascia un commento