- PR -

正規表現でメルアドのチェック

1
投稿者投稿内容
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2004-06-24 10:57
こんにちは
よろしくお願いします。

メルアドを正規表現で、おかしいもの(英数字._-以外の文字がある、@が2個以上ある)
をチェックしようとしています。
Regex regex = new System.Text.RegularExpressions.Regex( @"[\\w\\-\\.]+@([\\w\\-]+\\.)*([\\w\\-]+$)" );
と書いてみたのですが、
メルアドの最初から@までの部分のチェックが上手く行われません。
@のうしろについては、
英数字以外の文字("#$%&'()=~)等が入っていたら、一致しないのですが、
@の前の文字列に英数字以外の文字が入っていたり、
@が2つある(連続しているのは除く[@@])と、一致してしまいます。

例)
regex.IsMatch("メールアドレス")
aaa#dsa@dsa ← true が返ってくる
aaa"@saf.asd ← true が返ってくる
aa@sd@fs   ← true が返ってくる
aa@@fd    ← false が返ってくる[正常]
aa@aa#.sdf  ← false が返ってくる[正常]
aa@.sad    ← false が返ってくる[正常]

正規表現の@より前の部分( [\\w\\-\\.]+@ )がおかしいのだと思うのですが
どのように修正すればいいでしょうか?

よろしくお願いします。m(_ _)m

P.S.
\\w\\-等に
\\が2つ付いていますが、1つだけ付けています。
1つだけ表示する方法がわかりませんでした。m(_ _)m

開発環境
WinXPPro、C#、VS.NET2003
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2004-06-24 11:58
すみません。
解決しました。

Regex( @"( ^[¥w¥-¥.]+)@([¥w¥-]+¥.)*[¥w¥-]+$" );

とすれば、上手く行きました。( 「 ^ 」を追加しました。)

失礼しました。m(_ _)m
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-06-24 12:43
どもです。がると申します。
微妙に余談なのですが。

メルアドレスのユーザ名部分(@の前)ですが。
実は、@や<>など、_−以外の記号も使うことができてしまいます。
一応、RFC的にも正しいメールアドレスです。困ったことに。

ちっと参考までに。
前川
常連さん
会議室デビュー日: 2004/04/27
投稿数: 38
お住まい・勤務地: 1DK
投稿日時: 2004-06-24 13:02
余談ついでに。
メールアドレスの正規表現」だそうです。
#RFC821、822 がobsoleteになった事でどう影響するのかまでは知りません

予め限られたパターンのアドレスしか対応しないなら、それ程気にする事でもありませんが。
コウイチ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 48
投稿日時: 2004-06-24 14:20
がるがるさん、前川さん
返信ありがとうございます。

引用:
メルアドレスのユーザ名部分(@の前)ですが。
実は、@や<>など、_−以外の記号も使うことができてしまいます。
一応、RFC的にも正しいメールアドレスです。困ったことに。


ほ、ほんとに困ります><

「メールアドレスの正規表現」のPerlは、・・・。><

RFCには、目をさっとしか通していないんですが、
私の技術では無理そうなので、
なにかパターンを決めようと思います。

ありがとうございました。
また、よろしくお願いします。m(_ _)m
1

スキルアップ/キャリアアップ(JOB@IT)