Share |

domenica 29 agosto 2010

PHP: Validare numeri, date ed email

In questo articolo PHP voglio presentare il componente open source Validate.

Sostanzialmente si tratta di una libreria molto utile ed affidabile, da utilizzare ogni volta che si devono compiere operazioni di validazione su alcuni tipi di dati, quali:

  • Numeri: range di valori, min/max, decimali ed altro;
  • Stringhe: trasformazioni ad altri tipi predefiniti;
  • E-mail: sintassi, verifica di indirizzi e domini;
  • Date: operazioni su date e formattazione;
  • URI: secondo la direttiva RFC2396

Il componente solitamente non è distribuito insieme ai package predefiniti(Es: GDLib e CURL) e quindi probabilmente sarà necessario installarlo tramite PEAR (PHP Extension and Application Repository).

Che cos'è PEAR?

Traduzione della descrizione riportata sul sito:
"PEAR è un framework ed un sistema di distribuzione di componenti PHP riusabili."

In parole povere è un repository nel quale risiedono componenti PHP aggiuntivi pronti per essere installati, al pari di RubyGems per il mondo Ruby e Ruby on Rails.

Per installare la libreria Validate si posso seguire le istruzioni disponibili su siti sopra elencati ed anche questo articolo presente su HTML.it, nel caso tu debba installare anche PEAR.

Di seguito alcuni esempi per dimostrare la facilità d'utilizzo della libreria Validate.

Validare un indirizzo email.

La classe Validate per la validazione di indirizzi email mette a disposizione il metodo statico email(string, options[]).

Le opzioni offerte dalla libreria sono molte ed importanti, è consigliata una lettura sul sito di riferimento.

Il secondo parametro, ovvero un array di opzioni, è una caratteristica fondamentale per utilizzare a fondo la libreria e comune a tutti i metodi che saranno analizzati nelle successive sezioni dell'articolo.

<?php
require_once 'Validate.php';

if (!Validate::email('mickey@topolinia.car'))
    echo 'Indirizzo email non validato.';
else
    echo 'Indirizzo email validato.';

?>

Nell'esempio precedente, il metodo email(indirizzo) è utilizzato per eseguire un controllo solo dal punto di vista sintattico-formale, ossia che non esistano errori di forma e di punteggiatura.

Nel seguente, invece, al metodo viene passata anche una feature per verificare la stretta aderenza alla specifica RCF822.

<?php
$email = '"Mouse, Mickey" <mickey@topolinia.car>';
if (Validate::email($email, array('use_rfc822' => true))) {
    echo 'Indirizzo email corretto.';
} else {
    echo 'Indirizzo email non corretto.';
}
?>

Nell'esempio successivo è richiesta la verifica dell'esistenza del dominio.

<?php
require_once 'Validate.php';

if (Validate::email('mickey@topolinia.car'
        , array('check_domain' => 'true')))
    echo 'Il dominio è valido ed esiste.';
else
    echo 'Il dominio non è stato validato.';

?>

Validazione di date,

Per la validazione di date e formati, la classe Validate espone il metodo statico date(string, options[]).

Nell'esempio che segue per prima cosa verrà verificata la corretta formattazione della data 061275 rispetto al pattern passato in options[], dopodiché sarà controllato che la data sia compresa nell'arco di tempo che va dal 15 Novembre 1975 al 31 Dicembre dello stesso anno.

<?php
require_once 'Validate.php';

var_dump(
    Validate::date(
        '061275',
        array(
            'format' => '%d%m%y',
            'min' => array('15', '11', '1975'),
            'max' => array('31', '12', '1975')
        )
    )
);
?>

Validare valori numerici.

La validazione di numeri è molto importante, soprattutto in ambiti assicurativi e bancari, e per fare ciò la classe Validate fornisce il metodo statico number(num, options[]).

Nell'esempio che segue, si vuole validare un numero decimale di 3 cifre decimali e il cui carattere separatore è la virgola.

<?php
require_once 'Validate.php';

echo (Validate::number('1,234', array('decimal' => ',', 'dec_prec' => 3)))
    ? echo 'Il numero è valido'
    : echo 'Il numero non è valido';
}

?>

Il prossimo esempio mostra come validare un numero negativo decimale verificando che soddisfi le condizioni:

  • utilizzare come separatore per la virgola il carattere ',' o '.';
  • essere compreso tra i valori -9 e -7;
<?php
require_once 'Validate.php';

if (Validate::number('-7,987',
        array('decimal' => '.,', 'min' => -9, 'max' => -7 )))
    echo 'Il numero è valido';
else
    echo 'Il numero non è valido';

?gt;

Validare Stringhe

Per eseguir controlli sulle stringhe, si utilizza il metodo string(string, options[]).
Il metodo, riceve due valori: la stringa da controllare e un'array di opzioni.

Le opzioni sono veramente molte e coprono tutte le esigenze, è consigliato dare uno sguardo alla documentazione ufficiale.

Nel prossimo esempio si verifica che la stringa da controllare sia scritta solo con caratteri maiuscoli e che sia composta da soli numeri e spazi, oltre ai caratteri maiuscoli.

<?php
require_once 'Validate.php';

if (Validate::string("1975 MIRKO AGRATI", array(
        'format' => VALIDATE_NUM . VALIDATE_SPACE . VALIDATE_ALPHA_UPPER)))
    echo 'La stringa è stata validata.';
else
    echo 'La stringa non è stata validata.';

?>

Validate e l'internazionalizzazione.

La libreria prevede anche la verifica di codici postali, città ed altro nell'ambito di uno specifico continente, questa validazione è chiamata validate features e rimando alla documentazione ufficiale, dalla quale ho appreso che il modulo per l'Italia non è disponibile.

Questo articolo, sebbene non approfondisce le molteplici opzioni di ogni singolo componente di verifica, mostra in maniera chiara e semplice la facilità con cui è possibile compiere tutte le operazioni che altrimenti bisognerebbe scriversi da sé.

Io la utilizzo da un bel po' e la ritengo ormai indispensabile.

Alla prossima,
MA.

0 commenti:

Posta un commento

Non ti è chiaro qualcosa?
No problem, posta il tuo dubbio ;)

..... e ricordati di firmarlo!