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

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

  • 投稿者: chiba
  • 2009/3/22 日曜日 10:17:38
  • perl
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
>

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

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
https://blog.everqueue.com/chiba/2009/03/22/196/trackback/
トラックバックの送信元リスト
主要CPANモジュールのメールアドレスの正規表現 - へぼい日記 より

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

検索
フィード
メタ情報

ページの上部に戻る