The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package CGI::Untaint::country;

use warnings;
use strict;

use Locale::Country();

use base 'CGI::Untaint::printable';

=head1 NAME

CGI::Untaint::country - validate a country code or name

=cut

our $VERSION = 0.2;

=head1 SYNOPSIS

    use CGI::Untaint;
    my $handler = CGI::Untaint->new($q->Vars);
                                                                                # submit:
    $country_code2   = $handler->extract(-as_country          => 'country');    # 2 letter code e.g. 'uk'
    $country_code2   = $handler->extract(-as_countrycode      => 'country');    # same as above 
    $country_name    = $handler->extract(-as_countryname      => 'country');    # name e.g. 'United Kingdom'
    $country_code3   = $handler->extract(-as_countrycode3     => 'country');    # 3 letter code e.g. 'gbr'
    $country_code2   = $handler->extract(-as_to_countrycode   => 'country');    # name
    $country_code3   = $handler->extract(-as_to_countrycode3  => 'country');    # name
    $country_codenum = $handler->extract(-as_countrynumber    => 'country');    # numeric code e.g. '064'
    $country_codenum = $handler->extract(-as_to_countrynumber => 'country');    # name
    

=head1 DESCRIPTION

Verifies that the submitted value is a valid ISO 3166-1 country code, or a known name.
See L<Locale::Country|Locale::Country>.

=head1 METHODS

=over 4

=item is_valid

=back

=cut

sub is_valid {
    my ( $self ) = @_;
    
    my $codeset = $self->_codeset;
    
    # code in, code out
    return Locale::Country::code2country( $self->value, $codeset );
}

sub _codeset { Locale::Constants::LOCALE_CODE_ALPHA_2 }

=head1 AUTHOR

David Baird, C<< <cpan@riverside-cms.co.uk> >>

=head1 BUGS

Please report any bugs or feature requests to
C<bug-cgi-untaint-country@rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org>.  I will be notified, and then you'll automatically
be notified of progress on your bug as I make changes.

=head1 ACKNOWLEDGEMENTS

=head1 COPYRIGHT & LICENSE

Copyright 2005 David Baird, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut

1;