filter_id()
Come usare filter_id() in PHP per ottenere l'ID intero di un filtro dal suo nome, con esempi, valori restituiti e errori comuni.
Introduzione
filter_id() è una funzione PHP piccola ma utile che svolge un solo compito: prende il nome di un filtro (una stringa come "validate_email") e restituisce il relativo ID numerico — l'intero che le costanti FILTER_VALIDATE_EMAIL, FILTER_SANITIZE_STRING e simili contengono internamente.
È essenzialmente l'inverso di filter_list(), che fornisce l'elenco dei nomi dei filtri. Si ricorre a filter_id() quando si ha il nome di un filtro come stringa — tipicamente da configurazione, da un database o da input utente — e si necessita dell'intero che filter_var() e filter_input() si aspettano.
Questa pagina tratta la sintassi, i valori restituiti, un esempio eseguibile e l'errore più comune che le persone commettono con questa funzione.
Sintassi
filter_id(string $name): int|falseAccetta un solo parametro:
$name— il nome del filtro come stringa, ad es."validate_int","validate_email","sanitize_email". Sono i nomi in minuscolo restituiti dafilter_list(), non i nomi delle costantiFILTER_*.
Restituisce l'ID intero del filtro corrispondente, oppure false se nessun filtro ha quel nome.
Passare il nome del filtro, non il nome della costante
Questo è il punto che crea confusione. L'argomento è il nome breve del filtro in minuscolo — non la costante FILTER_VALIDATE_EMAIL e nemmeno la stringa "FILTER_VALIDATE_EMAIL".
<?php
var_dump(filter_id('validate_email')); // int(274) ✅ correct name
var_dump(filter_id('FILTER_VALIDATE_EMAIL')); // bool(false) ❌ that is the constant, not the name
var_dump(filter_id('not_a_real_filter')); // bool(false) ❌ unknown namePoiché un nome sconosciuto restituisce false, verificare sempre il risultato prima di usarlo come ID filtro. Un false verrebbe altrimenti silenziosamente convertito a 0 se passato dove ci si aspetta un intero.
Un esempio pratico
Un caso d'uso realistico: si consente agli utenti di scegliere una regola di validazione per nome (da un form, un file di configurazione o una richiesta API) e occorre applicarla dinamicamente. filter_id() trasforma quel nome nell'ID che filter_var() richiede.
<?php
$ruleName = 'validate_email'; // could come from user input or config
$value = '[email protected]';
$filterId = filter_id($ruleName);
if ($filterId === false) {
echo "Unknown filter: $ruleName";
} elseif (filter_var($value, $filterId) !== false) {
echo "'$value' passed the '$ruleName' filter (id $filterId).";
} else {
echo "'$value' failed the '$ruleName' filter.";
}
// Output: '[email protected]' passed the 'validate_email' filter (id 274).Si noti il controllo rigoroso === false: un filtro valido come int ha ID 257, che è truthy, ma affidarsi a una verifica di veridicità generica gestirebbe comunque in modo errato un filtro sconosciuto. Confrontare esplicitamente con false mantiene distinti i due casi.
Scoprire i nomi di filtro validi
Per vedere esattamente quali nomi accetta filter_id(), iterare su filter_list():
<?php
foreach (filter_list() as $name) {
echo $name . ' => ' . filter_id($name) . PHP_EOL;
}
// int => 257
// boolean => 258
// validate_email => 274
// validate_url => 273
// sanitize... and so onQuando usarla
- Validazione dinamica — quando il filtro da applicare viene deciso a runtime da una stringa.
- Mappatura configurazione-filtri — per trasformare nomi di regole leggibili in un file di configurazione negli ID richiesti da
filter_var()/filter_input(). - Introspezione / strumenti — per elencare i filtri disponibili e i loro ID.
Se si conosce già il filtro al momento della scrittura del codice, si può saltare filter_id() e usare direttamente la costante (filter_var($email, FILTER_VALIDATE_EMAIL)) — è più chiaro e non richiede una ricerca.
Funzioni correlate
filter_list()— ottieni tutti i nomi dei filtri supportati.filter_var()— filtra una singola variabile tramite ID filtro.filter_input()— filtra un valore proveniente da una sorgente di input.php-filters— panoramica dell'estensione filtri di PHP.