Perl field-level input validation errors
Perl
use strict;
use warnings;
sub validate {
my ($input, $rules) = @_;
my %errors;
for my $field (sort keys %$rules) {
my $value = defined $input->{$field} ? $input->{$field} : '';
$value =~ s/^\s+|\s+$//g;
my $rule = $rules->{$field};
if ($rule->{required} && $value eq '') { $errors{$field} = 'is required'; next; }
next if $value eq '';
$errors{$field} = "must be at least $rule->{min} characters" if $rule->{min} && length $value < $rule->{min};
$errors{$field} //= 'has an invalid format' if $rule->{pattern} && $value !~ $rule->{pattern};
}
return \%errors;
}
my $errors = validate({ name => ' ', email => 'nope' },
{ name => { required => 1, min => 2 }, email => { required => 1, pattern => qr/^\S+\@\S+$/ } });
print "$_: $errors->{$_}\n" for sort keys %$errors;