- 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 >
になる件。近いうちにパッチ作って送るかも。
- 新しい: Exif情報確認君はじめりです
- 古い: メールアドレス(addr-spec)の正規表現
コメント:0
トラックバック:0
- この記事のトラックバック URL
- https://blog.everqueue.com/chiba/2009/03/22/196/trackback/
- トラックバックの送信元リスト
- 主要CPANモジュールのメールアドレスの正規表現 - へぼい日記 より