改行区切りの email アドレスのリストが標準入力経由で渡されます。
この email アドレスがページ末にある仕様として正当なものであれば ok
を、そうでなければ ng
を改行区切りのリストとして標準出力へ書き込むプログラム validate_addr_spec
を実装してください。
なお、既存のメールアドレス判定関数は使わずに、自前で書いてください!
$ cat email_address.list
[email protected]
[email protected]
$ ./validate_addr_spec < email_address.list
ok
ng
採点を受けたい場合は、入力データを渡すので下のコマンドの実行結果を @kuniwak まで送ってください!
$ ./validate_addr_spec < email_address.list > result
メールアドレスは、 ローカル部
@
ドメイン部
という3つのパーツから構成されます。
それぞれ、次のすべての仕様を満たさなければなりません:
ドメイン部
:example.com
などのドメインを表す部分- 仕様D1: ドメイン部に使ってよい文字は、大小英数文字と一部の記号
!#$%&'*+-/=?^_`{|}~
と.
だけである - 仕様D2: ドメイン部は
.
で始まらない - 仕様D3: ドメイン部は
.
で終わらない - 仕様D4: ドメイン部に連続した
.
は現れない - 仕様D5: ドメイン部の文字列長は1以上である
- 仕様D1: ドメイン部に使ってよい文字は、大小英数文字と一部の記号
@
:- 仕様A1: ローカル部とドメイン部の間にはただ1つの
@
がなければならない
- 仕様A1: ローカル部とドメイン部の間にはただ1つの
ローカル部
:user
などのメールボックス名を表す部分- 仕様L1: ローカル部は、
ドットアトム部
またはクオーテッド文字列部
のどちらかである ドットアトム部
:- 仕様LD1: ドットアトム部で使える文字は、大小英数文字と一部の記号
!#$%&'*+-/=?^_`{|}~
と.
だけである - 仕様LD2: ドットアトム部は
.
で始まらない - 仕様LD3: ドットアトム部は
.
で終わらない - 仕様LD4: ドットアトム部に連続した
.
は現れない - 仕様LD5: ドットアトム部の文字列長は1以上である
- 仕様LD1: ドットアトム部で使える文字は、大小英数文字と一部の記号
クオーテッド文字列部
:- 仕様LQ1: クオーテッド文字列部は
"
で始まる - 仕様LQ2: クオーテッド文字列部は
"
で終わる - 仕様LQ3: クオーテッド文字列部の先頭と末尾以外で使える文字は、大小英数文字と一部の記号
!#$%&'*+-/=?^_`{|}~(),.:;<>@[]"\
だけである - 仕様LQ4: クオーテッド文字列部の先頭と末尾以外で一部の記号
"\
を使う場合、ただ1つ\
を前置しなければならない - 仕様LQ5: クオーテッド文字列部の文字列長は2以上である
- 仕様LQ1: クオーテッド文字列部は
- 仕様L1: ローカル部は、
※ これは RFC5312 addr-spec の部分的な仕様です(なぜなら、実際の仕様を満たす実装はとても難しい)。
※ 「大小英数文字」とは、ASCII 文字集合のうち、16進表記で 30 から 39、41 から 5A、61 から 7Aに含まれる文字の集合を指す。