Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

very lite and fast validation library for perl

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 author
Octocat-spinner-32 lib
Octocat-spinner-32 t
Octocat-spinner-32 xt
Octocat-spinner-32 .gitignore
Octocat-spinner-32 Build.PL
Octocat-spinner-32 Changes
Octocat-spinner-32 LICENSE
Octocat-spinner-32 META.json
Octocat-spinner-32 README.md
Octocat-spinner-32 TODO
Octocat-spinner-32 cpanfile
Octocat-spinner-32 minil.toml
README.md

NAME

FormValidator::Lite - lightweight form validation library

SYNOPSIS

use FormValidator::Lite;

FormValidator::Lite->load_constraints(qw/Japanese/);

my $q = CGI->new();
my $validator = FormValidator::Lite->new($q);
$validator->load_function_message('en');
my $res = $validator->check(
    name => [qw/NOT_NULL/],
    name_kana => [qw/NOT_NULL KATAKANA/],
    {mails => [qw/mail1 mail2/]} => ['DUPLICATION'],
);
if ( ..... return_true_if_error() ..... ) {
    $validator->set_error('login_id' => 'DUPLICATION');
}
if ($validator->has_error) {
    ...
}

# in your template
<ul>
? for my $msg ($validator->get_error_messages) {
    <li><?= $msg ?></li>
? }
</ul>

DESCRIPTION

FormValidator::Lite is a simple, fast implementation for form validation.

IT'S IN BETA QUALITY. API MAY CHANGE IN THE FUTURE.

HOW TO WRITE YOUR OWN CONSTRAINTS

Create your own constraint package as such :

package MyApp::Validator::Constraint;
use strict;
use warnings;
use FormValidator::Lite::Constraint;


rule 'IS_EVEN' => sub {
    return $_ % 2 ? 0 : 1;
};


rule 'IS_GREATER_THAN' => sub {
    my ($min) = @_;
    return $_ >= $min;
}
alias 'IS_GREATER_THAN' => 'IS_BIGGER_THAN';


1;

And in your controller :

use FormValidator::Lite qw("+MyApp::Validator::Constraint");


my $validator = FormValidator::Lite->new(...);
$validator->set_message_data(...);
$validator->check(
    some_param => [ 'UINT', 'IS_EVEN', ['IS_GREATER_THAN' => 42] ],
);

When defining a rule keep in mind that the value for the parameter comes from $_ and the additional arguments defined in your validation specifications come from @_.

METHODS

  • my $validator = FormValidator::Lite->new($q);

    Create a new instance.

    The constructor takes a mandatory argument $q that is a query-like object such as Apache::Request, CGI.pm, Plack::Request. The object MUST have a $q->param method.

    __EXPERIMENTAL: __ You can pass the hash value for $q.

  • $validator->query()

  • $validator->query($query)

    Getter/Setter for the query attribute.

  • $validator->check(@specs_array)

    Validate the query against a set of specifications defined in the @specs_array argument. In the most common case, the array is a sequence of pairs : the first item is the parameter name and the second item is an array reference with a list of constraint rules to apply on the query's value for the parameter.

    my $res = $validator->check(
        name      => [qw/NOT_NULL/],
        name_kana => [qw/NOT_NULL KATAKANA/],
        {mails => [qw/mail1 mail2/]} => ['DUPLICATION'],
    );
    

    In the above example name is a parameter. NOT_NULL, KATAKANA and DUPLICATION are the names of the constraints.

  • $validator->is_error($key)

    Return true value if there is an error for the $key parameter.

  • $validator->is_valid()

    Return true value if $validator didn't detect any error.

    This is the same as !$validator->has_error().

  • $validator->has_error()

    Return true value if $validator detects error.

    This is the same as !$validator->is_valid().

  • $validator->set_error($param, $rule_name)

    Manually set a new error for the parameter named $param. The rule's name is $rule_name.

  • $validator->errors()

    Return all the errors as a hash reference where the keys are the parameters and the values are a hash reference with the failing constraints.

    {
        'foo' => { 'NOT_NULL' => 1, 'INT' => 1 },
        'bar' => { 'EMAIL' => 1, },
    }
    
  • $validator->load_constraints($name)

    $validator->load_constraints("DATE", "Email");
    
    # or load your own constraints
    $validator->load_constraints("+MyApp::FormValidator::Lite::Constraint");
    

    You can also load the constraints during import :

    use FormValidator::Lite qw/Date Email/;
    

    Load constraint components named "FormValidator::Lite::Constraint::${name}".

  • $validator->load_function_message($lang)

    $validator->load_function_message('ja');
    

    Load function message file.

    Currently, FormValidator::Lite::Messages::ja and FormValidator::Lite::Messages::en are available.

  • $validator->set_param_message($param => $message, ...)

    $validator->set_param_message(
        name => 'Your Name',
    );
    

    Add a message-friendly description for the parameter.

  • $validator->set_message("$param.$func" => $message)

    $v->set_message('zip.jzip' => 'Please input correct zip number.');
    

    Set an error message for a given $param and $func pair.

  • $validator->set_message_data({ message => $msg, param => $param, function => $function })

    $v->set_message_data(YAML::Load(<<'...'));
    ---
    message:
      zip.jzip: Please input correct zip number.
    param:
      name: Your Name
    function:
      not_null: "[_1] is empty"
      hiragana: "[_1] is not Hiragana"
    ...
    

    Set the error message map. In the 'function' and 'message' sections, [_1] will be replaced by build_message with the description of the failing parameter provided in the 'param' section.

  • $validator->build_message($tmpl, @args)

    replace [_1] in $tmpl by @args.

    Setup error message map.

  • $validator->set_message("$param.$func" => $message)

    $v->set_message('zip.jzip' => 'Please input correct zip number.');
    

    Note that it will void any previous calls to load_function_message, set_message or set_param_message.

  • my @errors = $validator->get_error_messages()

  • my $errors = $validator->get_error_messages()

    Get all the error messages for the query. This method returns an array in list context and an array reference otherwise.

  • my $msg = $validator->get_error_message($param => $func)

    Generate the error message for parameter $param and function $func.

  • my @msgs = $validator->get_error_messages_from_param($param)

    Get all the error messages for the parameter $param.

WHY NOT FormValidator::Simple?

Yes, I know. This module is very similar with FV::S.

But, FormValidator::Simple is too heavy for me. FormValidator::Lite is fast!

Perl: 5.010000
FVS: 0.23
FVL: 0.02
                        Rate FormValidator::Simple   FormValidator::Lite
FormValidator::Simple  353/s                    --                  -75%
FormValidator::Lite   1429/s                  304%                    --

AUTHOR

Tokuhiro Matsuno

THANKS TO

craftworks

nekokak

tomi-ru

SEE ALSO

FormValidator::Simple, Data::FormValidator, HTML::FormFu

LICENSE

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

Something went wrong with that request. Please try again.