正規表現/メールアドレス
いろいろな独自仕様があるようなので、簡単な正規表現でバシッとメールアドレスを定義することは難しい。ので、もうチェックしなきゃいいんじゃないのという気もする。けど、入力ミスってますよ、くらいのフィードバックはしたいからゆるいチェックはやっぱりする。
仕様
およそWikipediaに記載のルールに従って次をとりあげた。
ローカル部
- 大小のラテン文字
- 数字
- ! # $ % & ‘ * + - / = ? ^ _ ` { | }
- .
- 最大長64文字
次は省く(type=emailしたときのブラウザのチェックにもないか)
- . が先頭または末尾あるいはそのどちらもにあってはいけない
- . が連続してはいけない
次は諦める
- ”” でくくられた形式であれば他に記号が使える
ドメイン部
- ラテン文字
- 数字
- -
- TLDにはなし
次は省く
- ドメインの長さの最大長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.isEmpty())
.map(i -> i.matches(regex))
.orElse(true);
作成日 2017-06-19
