- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 正規表現/メールアドレス へ行く。
- 1 (2017-03-22 (水) 11:16:03)
- 2 (2017-03-22 (水) 11:18:41)
いろいろな独自仕様があるようなので、簡単な正規表現でバシッと定義することは難しい。ので、もうチェックしなきゃいいんじゃないのという気もするけど、入力ミスってますよ、くらいのフィードバックはしたいからゆるいチェックはしたい。
仕様†
およそWikipediaに記載のルールに従って次をとりあげた。
ローカル部†
- 大小のラテン文字
- 数字
- ! # $ % & ' * + - / = ? ^ _ ` { | }
- .
- 最大長64文字
次は省く(type=emailしたときのブラウザのチェックにもないか)
- . が先頭または末尾あるいはそのどちらもにあってはいけない
- . が連続してはいけない
次は諦める
- "" でくくられた形式であれば他に記号が使える
ドメイン部†
- ラテン文字
- 数字
- -
次は省く
- ドメインの長さの最大長253文字
- メールアドレス全体の長さの最大長254文字
次は諦める
- [] でくくられたIPアドレス
実装†
Optionalの箇所は入力がない場合はパスするように。
String local = "[a-zA-Z0-9!#$%&'*+\\-./=?^_`{|}~]{1,64}";
String domain = "([A-Za-z0-9\\-]+\\.)+[A-Za-z]+";
String address = local + "@" + domain;
String regex = "^" + address + "$";
Optional.ofNullable(input)
.filter(i -> i != null)
.filter(i -> ! i.isEmpty())
.map(i -> i.matches(regex))
.orElse(true);