Skip to content

Instantly share code, notes, and snippets.

@hilotech
Last active August 29, 2015 14:19
Show Gist options
  • Save hilotech/fcfe281067318f12231d to your computer and use it in GitHub Desktop.
Save hilotech/fcfe281067318f12231d to your computer and use it in GitHub Desktop.
ついカッとなってつくったバリデーター(今は公開している)
package HiLoTECH::Validate;
#@errs = HiLoTECH::Validate({
# data => $v,
# validates => [
# {
# target => 'mailaddr',
# rules => [
# [ sub { return 1 if ( !$_[0] ) },
# 'メールアドレスが入力されていません' ],
# [ sub { return 1 if ( $_[0] !~ /^\w+\@\w+\.\w+$/ ) },
# 'メールアドレスがおかしいです' ],
# ],
# },
#});
sub HiLoTECH::Validate {
my $s = shift;
my $data = $s->{data};
my $validates = $s->{validates};
my @errs;
foreach my $v ( @{ $validates } ) {
next if ( !$v->{target} );
my $target = $v->{target};
my $d = $s->{data}->{$target};
next if ( !$v->{rules} );
foreach my $r ( @{ $v->{rules} } ) {
my $thisRule = @{$r}[0];
next if ( ref $thisRule ne 'CODE' );
my $thisErr = @{$r}[1];
my $stat = $thisRule->($d || '');
if ( !!$stat ) {
push @errs, ( !$thisErr ) ? $target : $thisErr;
}
}
}
return @errs;
}
1;
@hilotech
Copy link
Author

https://gist.github.com/hilotech/4a980bde292c92af700f
これを食わせるヤツ。
30分くらいでチャラッと作ったわりにはぜったいこっちのほうがわかりやすい!

@hilotech
Copy link
Author

真偽判定がザルだったのと、ルールごとにメッセージを出せないのを直した。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment