A partir do PHP 5.2 foi introduzida a função filter_var . Que serve justamente para filtrar uma variável a partir de um filtro especificado.
1
2
mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )
// Returns the filtered data, or FALSE if the filter fails.
Filtros pré-definidos:
1
2
3
4
5
6
7
8
9
10
11
// email filtering
echo filter_var ( 'email@domain.com' , FILTER_VALIDATE_EMAIL ); // email@domain.com
echo filter_var ( 'domain.com' , FILTER_VALIDATE_EMAIL ); // false
// url filtering
echo filter_var ( 'http://rogeriolino.com' , FILTER_VALIDATE_URL ); // http://rogeriolino.com
echo filter_var ( 'rogeriolino.com' , FILTER_VALIDATE_URL ); // false
// ip filtering
echo filter_var ( '127.0.0.1' , FILTER_VALIDATE_IP ); // 127.0.0.1
echo filter_var ( '127.0.1' , FILTER_VALIDATE_IP ); // false
Como a função pode retornar FALSE (caso o filtro falhe) ou o valor filtrado. Podemos utilizar o Not identical operator (!==) para verificar se retorno é realmente FALSE, ou seja, o valor testado não passou pelo filtro.
Colocando em prática a função mais orientação à objetos para criar algumas classes validadoras:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* Interface Validator
*/
interface Validator {
public function isValid ( $value );
}
/**
* Abstract class Simple Validator
*/
abstract class SimpleValidator implements Validator {
protected abstract function defaultFilter ();
public function isValid ( $value ) {
return filter_var ( $value , $this -> defaultFilter ()) !== false ;
}
}
/**
* Simple Email validator
*/
class EmailValidator extends SimpleValidator {
protected function defaultFilter () {
return FILTER_VALIDATE_EMAIL ;
}
}
/**
* Simple URL validator
*/
class UrlValidator extends SimpleValidator {
protected function defaultFilter () {
return FILTER_VALIDATE_URL ;
}
}
/**
* Simple IP Validator
*/
class IpValidator extends SimpleValidator {
protected function defaultFilter () {
return FILTER_VALIDATE_IP ;
}
}
Testando
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// email validating
$validator = new EmailValidator ();
echo $validator -> isValid ( 'rogeriolino@com' ); // false
echo $validator -> isValid ( 'contact@rogeriolino.com' ); // true
echo $validator -> isValid ( 'contact+spam@rogeriolino.com' ); // true
// URL validating
$validator = new UrlValidator ();
echo $validator -> isValid ( 'http://rogeriolino.com' ); // true
echo $validator -> isValid ( 'http://rogeriolino.com/contact' ); // true
echo $validator -> isValid ( 'rogeriolino.com/contact' ); // false
echo $validator -> isValid ( 'https://rogeriolino' ); // true
echo $validator -> isValid ( 'ftp://rogeriolino.com' ); // true
// URL validating
$validator = new IpValidator ();
echo $validator -> isValid ( '127.0.0.1' ); // true
echo $validator -> isValid ( '127.0.0' ); // false
echo $validator -> isValid ( '1050:0000:0000:0000:0005:0600:300c:326b' ); // true
echo $validator -> isValid ( '1050:0000:0000:0000:0005:0600' ); // false
Para ver outros filtros:
http://php.net/manual/filter.filters.validate.php