Não há realmente nenhuma maneira adequada de validar um campo de data, tudo o que você pode fazer é dividi-lo e verificá-lo em partes.
Existe checkdate()
, mas como mencionado nos comentários na página de documentos, ele não pode ser usado como um meio eficaz de higienizar a entrada de datas.
A primeira coisa que costumo verificar é o tipo de dados, se você espera uma string e depois lança para uma string e da mesma forma para valores inteiros e de array.
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
Para os campos de data, normalmente você tem um separador entre cada parte da data, divida com base nisso e projete as partes (quantas desejar) como números inteiros.
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
É claro que isso realmente depende de como você armazena a data e o que você espera nesse campo; é algo que você precisará sanear adequadamente de acordo com suas necessidades específicas.
Os valores numéricos são bastante fáceis, primeiro convertidos para int ..
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
Em seguida, verifique se está dentro do intervalo especificado (de acordo com sua pergunta).
// If it's not in range
if( $num < 100 || $num > 500 ) {
// Number is not in range
}
ou..
// If it is in range - including 100 & 500 as possible values
if( $num >= 100 && $num <= 500 ) {
// Number is in range
}
Verificar se uma string tem um comprimento específico é fácil, tão fácil que, na verdade, eu vou apenas vincular você à documentação do PHP para strlen.
http://php.net/manual/en/function.strlen.php
Os valores de data são os mais complicados na minha opinião, mas na verdade é um caso de escrever seu código para se adequar ao que você espera desse campo. Se você tem um campo com um formato de data de, D/M/Y
por exemplo, sabe que a /
(barra) estará (deveria) estar presente e que a divisão nesse delimitador deverá fornecer uma matriz de 3 valores numéricos ... (se a divisão não ' não fornecer três valores ou se não houver valores numéricos válidos, os dados serão inválidos).
Espero que ajude .. (e estou aberto à crítica se alguém tiver um método melhor para qualquer uma das opções acima).