sub match_RE_net_IPv4 {
my $val = shift;
no strict 'refs';
my $re = &RE_net_IPv4(-keep);
return ($val =~ $re) ? $1 : undef;
};
####
package Data::FormValidator::Constraints::Common;
use 5.005;
use strict;
require Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ISA = qw(Exporter);
$VERSION = '0.01';
BEGIN {
@EXPORT = &_build_exports_from_regexp_common;
use Symbol;
use Regexp::Common 'RE_ALL';
sub _build_exports_from_regexp_common {
my @exports;
my $package_ref = qualify_to_ref('Regexp::Common::');
my @subs = grep(/^RE_/, keys(%{*{$package_ref}}));
foreach my $sub (@subs) {
my $dfv_name = 'match_'.$sub;
print $dfv_name;
*$dfv_name = sub {
my $val = shift;
no strict 'refs';
my $re = &$sub(-keep);
return ($val =~ $re) ? $1 : undef;
};
push @exports, '&'.$dfv_name;
}
return @exports;
}
}
1;
####
# Integration with Regexp::Common;
use Test::More tests => 3;
use Data::FormValidator;
my %FORM = (
bad_ip => 'oops',
good_ip => '127.0.0.1',
);
my $results;
eval {
$results = Data::FormValidator->check(\%FORM, {
required => [qw/good_ip bad_ip/],
validator_packages => 'Data::FormValidator::Constraints::Common',
constraint_regexp_map => {
'/_ip$/' => 'RE_net_IPv4',
}
});
};
warn $@ unless ok((not $@), 'runtime errors');
ok($results->('valid')->{good_ip}, 'good ip');
ok($results->('invalid')->{bad_ip}, 'bad ip');