- 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モジュールのメールアドレスの正規表現 - へぼい日記 より