NAME
   HTML::ValidationRules - Extract Validation Rules from HTML Form Element

SYNOPSIS
     # form.html
     <!doctype html>
     <html>
       <head>
         <meta charset="UTF-8">
         <title>HTML5::ValidationRules</title>
       </head>
       <body>
         <form method="post" action="/post">
           <input type="text" name="text" pattern="[A-Za-z0-9]+" maxlength="255" />
           <input type="url" name="url" maxlength="255" required />
           <input type="email" name="email" maxlength="255" required="required" />
           <input type="number" name="number" min="200" max="800" />
           <textarea name="textarea" maxlength="1000" required></textarea>
           <input type="range"" name="range" min="20" max="80" />
           <input type="submit" value="submit" />
         </form>
       </body>
     </html>

     # in your code
     use HTML::ValidationRules;

     my $parser = HTML::ValidationRules->new;
     my $rules  = $parser->load_rules(file => 'form.html');

     # rules will be extracted as follows:
     # [
     #     text     => [ [ HTML_PATTERN => '[A-Za-z0-9]+' ], [ HTML_MAXLENGTH => 255 ] ],
     #     url      => [ HTML_URL    => [ HTML_MAXLENGTH => 255 ], 'NOT_BLANK'         ],
     #     email    => [ HTML_EMAIL  => [ HTML_MAXLENGTH => 255 ], 'NOT_BLANK'         ],
     #     number   => [ HTML_NUMBER => [ HTML_MIN => 200 ], [ HTML_MAX => 800 ]       ],
     #     textarea => [ [ HTML_MAXLENGTH => 1000 ], 'NOT_BLANK'                       ],
     #     range    => [ HTML_RANGE => [ HTML_MIN => 20 ], [ HTML_MAX => 80 ]          ],
     # ]

     # then do validation using FormValidator::Simple
     use FormValidator::Simple qw(HTML);

     my $query  = CGI->new;
     my $result = FormValidator::Simple->check($query => $rules);

     # or FormValidator::Lite
     use FormValidator::Lite;
     FormValidator::Lite->load_constraints('HTML');

     my $query     = CGI->new;
     my $validator = FormValidator::Lite->new($query);
     my $result    = $validator->check(@$rules);

DESCRIPTION
   HTML::ValidationRules regards HTML form element as validation rules
   definition and extract rules from it.

WARNING
   This software is under the heavy development and considered ALPHA
   quality now. Things might be broken, not all features have been
   implemented, and APIs will be likely to change. YOU HAVE BEEN WARNED.

METHODS
 new(%args)
         my $parser = HTML::ValidationRules->new(
             options => { ... } #=> options for HTML::Parser
         );

       Returns a new HTML::ValidationRules object.

 load_rules(%args)
         my $rules = $parser->load_rules(file => 'form.html');

       Parse HTML and extract validation rules from form element (defined
       as HTML5 client-side form validation spec, but not all of them).
       $rules has compatible form as args for FormValidator::Simple and
       FormValidator::Lite's check() method.

       %args are supposed to contain one of them below:

       *   file

           Path to a file or filehandle.

       *   html

           String of HTML.

SUPPORTED ATTRIBUTES
   HTML "input", "textare", and "select" elements can have some attributes
   related to validation. This module hasn't support all the attrs defined
   in HTML5 spec yet, just has done below so far:

   *   max (input)

   *   maxlength (input, textarea)

   *   min (input)

   *   pattern (input)

   *   required (input, textarea, select)

   *   type (input)

       *   type:url

       *   type:email

       *   type:number

       *   type:range

BUGS
   The "pattern" attribute is interpreted as a Perl regular expression, not
   a JavaScript regular expression as defined by the HTML spec. Please use
   common subset of Perl and JavaScript regular expression languages to
   keep compatibility with both Perl and Web browsers.

AUTHORS
   *   Kentaro Kuribayashi <[email protected]>

   *   Wakaba <[email protected]>

SEE ALSO
   *   <http://www.whatwg.org/specs/web-apps/current-work/multipage/#client
       -side-form-validation>

   *   <http://www.whatwg.org/specs/web-apps/current-work/multipage/#the-in
       put-element>

   *   <http://www.whatwg.org/specs/web-apps/current-work/multipage/#the-te
       xtarea-element>

LICENSE
   Copyright (C) Kentaro Kuribayashi

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