MVC::Neaf::X::Form - Form validator for Not Even A Framework


This module should be moved into a separate distribution or (ideally) merged with an existing module with similar functionality.

Possible candidates include Validator::LIVR, Data::FormValidator, Data::CGIForm, and more.


Ths module provides hashref validation mechanism that allows for showing per-value errors, post-validation user-defined checks, and returning the original content for resubmission.


    use MVC::Neaf::X::Form;

    # At the start of the application
    my $validator = MVC::Neaf::X::Form->new( \%profile );

    # Much later, multiple times
    my $form = $validator->validate( \%user_input );

    if ($form->is_valid) {
        do_intended_stuff( $form->data ); # a hashref
    } else {
        display_errors( $form->error ); # a hashref
        show_form_for_resubmission( $form->raw ); # also a hashref

As you can see, nothing here has anything to do with http or html, it just so happens that the above pattern is common in web applications.


new( \%profile )

Receives a validation profile, returns a validator object.

In the default implementation, %profile must be a hash with keys corresponding to the data being validated, and values in the form of either regexp, [ regexp ], or [ required => regexp ].

Regular expressions are accepted in qr(...) and string format, and will be compiled to only match the whole line.

NOTE One may need to pass qr(...)s in order to allow multiline data (e.g. in textarea).

NOTE Format may be subject to extention with extra options.

make_rules( \%profile )

Preprocesses the validation profile before doing actual validation.

Returns an object or reference to be stored in the rules property.

This method is called from new() and is to be overridden in a subclass.

validate( \%data )

Returns a MVC::Neaf::X::Form::Data object with methods:

  • is_valid - true if validation passed.

  • data - data that passed validation as hash (MAY be incomplete, must check is_valid() before usage).

  • error - errors encountered. May be extended if called with 2 args. (E.g. failed to load an otherwise correct item from DB). This also affects is_valid.

  • raw - user params as is. Only the known keys end up in this hash. Useful to send data back for resubmission.

do_validate( $raw_data )

Returns a pair of hashes: the cleaned data and errors.

This is called by validate() and is to be overridden in subclasses.


Returns list of data keys subject to validation.

All other keys present in the input SHOULD be ignored.


This module is part of MVC::Neaf suite.

Copyright 2016-2019 Konstantin S. Uvarin

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See for more information.