Home > perl > 主要CPANモジュールのメールアドレスの正規表現

主要CPANモジュールのメールアドレスの正規表現

  • 2009-03-22 (日) 10:17
  • perl
  • hatena count
use strict;

use Encode;
use Email::Address;
use Email::Valid;
use Email::Valid::Loose;
use Email::Find::addrspec;

my $wsp           = '[\x20\x09]';
my $vchar         = '[\x21-\x7e]';
my $quoted_pair   = "\\\\(?:$vchar|$wsp)";
my $qtext         = '[\x21\x23-\x5b\x5d-\x7e]';
my $qcontent      = "(?:$qtext|$quoted_pair)";
my $quoted_string = "\"$qcontent*\"";
my $atext         = '[a-zA-Z0-9!#$%&\'*+\-\/\=?^_`{|}~]';
my $dot_atom_text = "$atext+(?:[.]$atext+)*";
my $dot_atom      = $dot_atom_text;
my $local_part    = "(?:$dot_atom|$quoted_string)";
my $domain        = $dot_atom;
my $addr_spec     = qr{${local_part}[@]$domain};

my %addr_specs = (
    'mine' => $addr_spec,
    'Email::Address' => $Email::Address::addr_spec,
    'Email::Valid' => $Email::Valid::RFC822PAT,
    'Email::Valid::Loose' => $Email::Valid::Loose::Addr_spec_re,
    'Email::Find::addrspec' => $Email::Find::addrspec::Addr_spec_re,
);

use utf8;
my $input_addr_spec = 'hoge-hoge@example.com';
my $input_text = "ぼくの\@メールアドレスはbef\nore\x{7f}foo\@example.com\x{7f}afterです";
my $input_text_bytes = Encode::encode('utf-8', $input_text);

while ( my ( $package, $re ) = each %addr_specs ) {
    print "$package:\n";
    if ( $input_addr_spec =~ /\A$re\z/ ) {
        print " valid addr-spec\n";
    }
    else {
        print " invalid addr-spec\n";
    }

    print " flagged-utf8\n";
    if ( $input_text =~ /($re)/ms ) {
        print Encode::encode('utf-8', "  My addr-spec is <$1>\n");
    }
    else {
        print "  no-match\n";
    }

    print " bytes-utf8\n";
    if ( $input_text_bytes =~ /($re)/ms ) {
        print "  My addr-spec is <$1>\n";
    }
    else {
        print "  no-match\n";
    }
}

の結果が

Email::Find::addrspec:
 valid addr-spec
 flagged-utf8
  My addr-spec is <orefoo@example.com>
 bytes-utf8
  My addr-spec is <orefoo@example.com>
Email::Valid:
 valid addr-spec
 flagged-utf8
  My addr-spec is <ぼくの@メールアドレスはbef>
 bytes-utf8
  My addr-spec is <orefoo@example.comafter>
mine:
 valid addr-spec
 flagged-utf8
  My addr-spec is <foo@example.com>
 bytes-utf8
  My addr-spec is <foo@example.com>
Email::Valid::Loose:
 valid addr-spec
 flagged-utf8
  My addr-spec is <ぼくの@メールアドレスはbef>
 bytes-utf8
  My addr-spec is <orefoo@example.comafter>
Email::Address:
 valid addr-spec
 flagged-utf8
  My addr-spec is <ぼくの@メールアドレスはbef
>
 bytes-utf8
  My addr-spec is <ぼくの@メールアドレスはbef
>

になる件。近いうちにパッチ作って送るかも。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://www.geminium.com/chiba_blog/2009/03/22/196/trackback/
Listed below are links to weblogs that reference
主要CPANモジュールのメールアドレスの正規表現 from へぼへぼCTO日記
add to hatena hatena.comment (7) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (1) Total: 8

Home > perl > 主要CPANモジュールのメールアドレスの正規表現

Search
Feeds
Meta

Return to page top