- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 正規表現/メールアドレス へ行く。
- 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);