49
|
1 package Form::Filter::Regexp;
|
|
2 use strict;
|
|
3 use Common;
|
|
4 use Form::Filter;
|
|
5 use base qw(Form::Filter);
|
|
6
|
|
7 BEGIN {
|
|
8 DeclareProperty Regexp => ACCESS_READ;
|
|
9 }
|
|
10
|
|
11 sub CTOR {
|
|
12 my ($this,@args) = @_;
|
|
13
|
|
14 $this->SUPER::CTOR(@args[0,1]);
|
|
15
|
|
16 my $re = $args[2] or die new Exception('A regular expression is required');
|
|
17
|
|
18 $this->{$Regexp} = qr/$re/;
|
|
19 }
|
|
20
|
|
21 sub SUPPORTED_CONTEXT { Form::Filter::CTX_SINGLE | Form::Filter::CTX_EXISTENT }
|
|
22
|
|
23 sub Invoke {
|
|
24 my ($this,$object) = @_;
|
|
25
|
|
26 if ($object->isa('Form::ValueItem')) {
|
|
27 my $re = $this->{$Regexp};
|
|
28 if ($object->isEmpty or $object->Value =~ m/$re/) {
|
|
29 return new Form::FilterResult(State => Form::FilterResult::STATE_SUCCESS);
|
|
30 } else {
|
|
31 return new Form::FilterResult(Sate => Form::FilterResult::STATE_ERROR, Message => $this->FormatMessage($object), Target => $object );
|
|
32 }
|
|
33 } else {
|
|
34 die new Exception('Only a value items can be verified against a regular expression');
|
|
35 }
|
|
36 }
|
|
37
|
|
38 1;
|