開始行: いろいろな独自仕様があるようなので、簡単な正規表現でバシ... * 仕様 [#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.isEmpty()) .map(i -> i.matches(regex)) .orElse(true); 終了行: いろいろな独自仕様があるようなので、簡単な正規表現でバシ... * 仕様 [#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.isEmpty()) .map(i -> i.matches(regex)) .orElse(true); ページ名: