Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

[Resolvido] ISO 8601 Validator 0.1

Recommended Posts

Bom, já dizia o Grande Soldador (Robots - 2005): "Viu a necessidade, atenda"

 

Para evitar uma parcialmente desagrável Exception disparada por DateInterval::__construct(), decidi validar o interval spec informado.

 

Mas só encontrava Expressões Regulares monstruosas que tentavam abraçar quase todo o ISO 8601.

 

Então comecei agora há pouco a estruturar as rotinas de verificação, a começar pela em questão, o formato de um(a) Duration (Duração - não sei bem o porquê).

 

Toda contribuição, como sempre, serábem vinda.

 

<?php

class ISO8601 {

   /**
    * Validates a ISO 8601 Duration Format
    * Informations found at http-~~-//en.wikipedia.org/wiki/Iso8601#Durations
    *
    * @param   string|mixed $spec
    *
    * @return  boolean
    */
   public function validateDuration( $spec ) {

       $spec = strval( $spec );

       $regex = '/P(([1-9][0-9]+[YMDW])+)?(T([1-9][0-9]+[HMS])+)?/';

       preg_match( $regex, $spec, $matches );

       // Shifting the required 'P'

       array_shift( $matches );

       return ( count( $matches ) == 0 ? FALSE : TRUE );
   }
}
?>

Uso:

 

require_once 'ISO8601.php'; // Ou o seu path de localização ^^

$iso = new ISO8601;

var_dump( $iso -> validateDuration( 'PT10M' ) ); // Saída: bool(true)
var_dump( $iso -> validateDuration( 'P5X10M' ) ); // Saída: bool(false)

Enjoy! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.