- 追加された行はこの色です。
- 削除された行はこの色です。
- 正規表現/メールアドレス へ行く。
- 正規表現/メールアドレス の差分を削除
#author("2017-03-22T02:18:41+00:00","default:haruki","haruki") #author("2017-06-19T05:41:18+00:00","default:haruki","haruki") いろいろな独自仕様があるようなので、簡単な正規表現でバシッとメールアドレスを定義することは難しい。ので、もうチェックしなきゃいいんじゃないのという気もする。けど、入力ミスってますよ、くらいのフィードバックはしたいからゆるいチェックはやっぱりする。 * 仕様 [#m0ace2a7] およそWikipediaに記載のルールに従って次をとりあげた。 ** ローカル部 [#q4c61181] - 大小のラテン文字 - 数字 - ! # $ % & ' * + - / = ? ^ _ ` { | } ~ - . - 最大長64文字 次は省く(type=emailしたときのブラウザのチェックにもないか) - . が先頭または末尾あるいはそのどちらもにあってはいけない - . が連続してはいけない 次は諦める - "" でくくられた形式であれば他に記号が使える ** ドメイン部 [#c6ff33fe] - ラテン文字 - 数字 - - -- TLDにはなし 次は省く - ドメインの長さの最大長253文字 - メールアドレス全体の長さの最大長254文字 次は諦める - [] でくくられたIPアドレス * 実装 [#u275b992] 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);