And the validation routines are:sub validate_data($$) { my $q = shift; my $tmpl = shift; my %data = (); my %invalid = (); foreach my $key (keys %{$tmpl}) { my $value = $q->param($key); if (&{$tmpl->{$key}}($value)) { $data{$key} = $value if defined $value; } else { $invalid{$key} = 1; } } return (\%data, \%invalid); }
The "is_equal" routine probably needs to be generalized to be able to compare numbers and other things... You can use it like this:sub is_string { return sub { return $_[0] ne ""; }; } sub is_number { return sub { return $_[0] =~ m{^\d+$}; }; } sub is_range($$) { (my $l, my $u) = @_; return sub { return $_[0] =~ m{^\d+$} && $_[0] >= $l && $_[0] <= $u; }; } sub is_in_list($) { my $l = shift; return sub { return (grep { $_[0] eq $_ } @{$l}) != 0; }; } sub is_email { return sub { return $_[0] =~ m{^[-.+a-z0-9]+\@[-.+a-z0-9]+$}i; }; } sub is_required { my $t = shift; return sub { defined $_[0] and &{$t}($_[0]); }; } sub is_optional { my $t = shift; return sub { return defined $_[0] ? &{$t}($_[0]) : 1; }; } sub is_equal { my $v = shift; return sub { $_[0] eq $v ? 1 : 0; } }
my %fields = ( name => is_required(is_string()), email => is_required(is_email()), phone => is_optional(is_phone()), );
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Validate CGI data
by merlyn (Sage) on Jun 26, 2005 at 19:55 UTC | |
by marcelo.magallon (Acolyte) on Jun 26, 2005 at 20:36 UTC | |
by merlyn (Sage) on Jun 26, 2005 at 21:14 UTC |