File Coverage

blib/lib/HTML/CheckArgs/phone.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package HTML::CheckArgs::phone;
2              
3 1     1   4 use strict;
  1         2  
  1         35  
4 1     1   4 use warnings;
  1         3  
  1         27  
5              
6 1     1   6 use base 'HTML::CheckArgs::Object';
  1         1  
  1         1188  
7 1     1   427 use HTML::FormatData;
  0            
  0            
8              
9             sub is_valid {
10             my $self = shift;
11            
12             my $value = $self->value;
13             my $config = $self->config;
14              
15             $self->check_params( required => [], optional => [ 'country' ], cleanable => 1 );
16            
17             # no value passed in
18             if ( $config->{required} && !$value ) {
19             $self->error_code( 'phone_00' ); # required
20             $self->error_message( 'Not given.' );
21             return;
22             } elsif ( !$config->{required} && !$value ) {
23             return 1;
24             }
25              
26              
27             # clean it up for validation
28             # for US case, we clean it up a lot more below
29             $value = HTML::FormatData->new->format_text(
30             $value, clean_whitespace => 1, strip_html => 1,
31             );
32            
33             # which country? must be a two-character country abbr
34             # only does careful validation check for US for now
35             my $country = uc $config->{params}{country} || 'US';
36              
37             if ( uc( $country ) eq 'US' ) {
38             $value =~ tr/0-9//cd;
39             if ( $value !~ m/^\d{10}$/ ) {
40             $self->error_code( 'phone_01' ); # not valid
41             $self->error_message( 'Not valid; please enter a 10-digit phone number, including area code.' );
42             return;
43             }
44            
45             # if not US, just do a sanity check on length
46             } elsif ( length( $value ) > 100 ) {
47             $self->error_code( 'phone_02' ); # over max length
48             $self->error_message( 'Exceeds the maximum allowable length (100 characters).' );
49             return;
50             }
51              
52             # return cleaned value?
53             unless ( $config->{noclean} ) {
54             $self->value( $value );
55             }
56            
57             return 1;
58             }
59              
60             1;