いろいろな独自仕様があるようなので、簡単な正規表現でバシッとメールアドレスを定義することは難しい。ので、もうチェックしなきゃいいんじゃないのという気もする。けど、入力ミスってますよ、くらいのフィードバックはしたいからゆるいチェックはやっぱりする。

仕様

およそWikipediaに記載のルールに従って次をとりあげた。

ローカル部

次は省く(type=emailしたときのブラウザのチェックにもないか)

次は諦める

ドメイン部

次は省く

次は諦める

実装

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);
Last-modified: 2017-06-19 (月) 14:41:18 (825d)