# NAME

FormValidator::Simple::Struct - Validation module for nested array ,hash ,scalar  like FormValidator::Simple

# VERSION

This document describes FormValidator::Simple::Struct version 0.16.

# SYNOPSIS

    use FormValidator::Simple::Struct;
    $v = FormValidator::Simple::Struct->new();
    $parameters = { id => 100};
    $rule = {id => 'INT'};
    $v->check($parameters , $rule)
    
    if($v->has_error){
        for my $error(@{$v->get_error}){
            die($error->{param_name} . ' is not ' . $error->{error});
        }
    }

# DESCRIPTION

    You can check some value types in Scalar , Arrayref , Hashref.

# Functions

## check

    $v = FormValidator::Simple::Struct->new();
    $v->check(111 , "INT"); # return true
    $v->check(111 , "STRING"); # return false and $v->has_error is true 
    $v->check([111 , 1222, 333] , ["INT"]);# return true
    $v->check({ key  => 'value'},{key=> "ASCII"});# return true
    $v->check([{id => 111,id2=> 22.2 },{id=> 1222 , id2=> 1.11},{id=> 333 , id2=> 44.44}] , [{id =>"INT",id2 => "DECIMAL"}]);# return true

## has\_error

    $v->check(
      {key =>  "abcdefghijklmnop" },
      {key => ["ASCII","NOT_BLANK" , ['LENGTH' , 1 , 15]]});
    if($v->has_error){
        # error handling routine
    }

## get\_error

    $v->check(
      {key =>  "abcdefghijklmnop" },
      {key => ["ASCII","NOT_BLANK" , ['LENGTH' , 1 , 15]]});
    if($v->has_error){
        use Data::Dumper;
        warn Dumper $v->get_error;
        #$VAR1 = [
        #  {
        #    'min_value' => 1,
        #    'error' => 'LENGTH',
        #    'position' => '$param->{hoge}',
        #    'max_value' => 15,
        #    'param_name' => 'hoge',
        #    'message' => 'LENGTH IS WRONG'
        #  }
        #];
    }

## INT

    # allow integer ; 10 , 0 , -10
    ok $v->check(
       {key =>  "1" },
       {key => "INT"});

## STRING

    # allow all Strings
    ok $v->check(
       ["111" , "abcde"],
       ["STRING"]);

## ASCII

    # allow Arabic number and alphabet and ascii symbols
    ok $v->check(
       ["111" , 'abcde!"#$%%()'],
       ["ASCII"]);
    
    # not allow multi bytes characters
    ng $v->check(
       [Non-ASCII character],
       ["ASCII"]);

## DECIMAL

    # allow integer and decimals ; 10 1,0 , 0 , -10 , -1.0
    ok $v->check(
       ["111" , "11.1" , "-11" , '0' , '-1.15'],
       ["DECIMAL"]);

## URL

    # allow ^http|^https
    ok $v->check(
       ["http://google.com" , 'https://www.google.com/'],
       ["URL"]);

    ng $v->check(
       ["git://google.com" , 'smb://www.google.com/'],
       ["URL"]);

## EMAIL

    this is base on Email::Valid;

## DATETIME

    # The following examples are followed. 
    ok $v->check([
        '%Y-%m-%d %H:%M:%S',
        '%Y/%m/%d %H:%M:%S',
        '%Y-%m-%d %H-%M-%S',
        '%Y/%m/%d %H-%M-%S',],
    ['DATETIME']);

## DATE

    # The following examples are followed. 
    ok $v->check([
       '%Y-%m-%d',
       '%Y/%m/%d'],
    ['DATE']);

## TIME

    # The following examples are followed. 
    ok $v->check([
       '%H-%M-%S',
       '%H-%M-%S'],
    ['TIME']);

## LENGTH

    # check value length
    $rule = ["ASCII","NOT_BLANK" , ['LENGTH' , 1 , 8]];
    ok $v->check(['a'] , $rule);
    ng $v->check(['abcdefghi'] , $rule);

    $rule = ["ASCII","NOT_BLANK" , ['LENGTH' , 4]];
    ng $v->check(['abc'] , $rule) # false 
    ok $v->check(['abcd'] , $rule) # true
    ng $v->check(['abcde'] , $rule) # false 

## BETWEEN

    # check value 
    $rule = ["INT",['BETWEEN' , 1 , 8]];
    ok $v->check([1] , $rule) # true
    ng $v->check([3.1] , $rule) # false not INT
    ok $v->check([5] , $rule) # true
    ng $v->check([7.9] , $rule) # false not INT 
    ok $v->check([8] , $rule) # true
    ng $v->check([9] , $rule) # false, input is over 8
    ng $v->check([0] , $rule) # false, input is under 1

# DEPENDENCIES

Perl 5.8.1 or later.

# BUGS

All complex software has bugs lurking in it, and this module is no
exception. If you find a bug please either email me, or add the bug
to cpan-RT.

# SEE ALSO

[perl](https://metacpan.org/pod/perl)

# AUTHOR

S2 <s2otsa59@gmail.com>

# LICENSE AND COPYRIGHT

Copyright (c) 2012, S2. All rights reserved.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.