EmailValidator ローカル末尾"."で不正
Emailアドレスの妥当性を判定するために
org.apache.commons.validator.EmailValidator
を利用しているようで、別部署から「アカウント末尾"."で不正となる」との報告を受け調べてみる。
標準的なメールアドレスの規格だと
・末尾"." ex) abcd.@hoeg.jp
・連続する"." ex) ab..cd@hoge.jp
はNG。
EmailValidatorはその仕様に準じているようだ。
だけど、docomo、AUはその規格を守ってないらしく、アドレスとして設定できるようで
id:kosekiさんの記事を参考させてもらい拡張クラスで対応。
※EmailValidatorのバージョンは不明
package jp.co.meiji.common; import org.apache.commons.validator.EmailValidator; import org.apache.oro.text.perl.Perl5Util; public class EmailValidExt extends EmailValidator { // 以下は変更なし。コピーしただけ。 private static final String SPECIAL_CHARS = "\\(\\)<>@,;:'\\\\\\\"\\.\\[\\]"; private static final String VALID_CHARS = "[^\\s" + SPECIAL_CHARS + "]"; private static final String QUOTED_USER = "(\"[^\"]*\")"; private static final String WORD = "((" + VALID_CHARS + "|')+|" + QUOTED_USER + ")"; // ユーザ名の中の連続したピリオドと末尾の連続したピリオドを許可。 private static final String USER_PATTERN = "/^\\s*" + WORD + "(\\.+" + WORD + ")*\\.*$/"; private static final EmailValidExt EXTEND_VALIDATOR = new EmailValidExt(); /** * Returns the Singleton instance of this validator. * @return singleton instance of this validator. */ public static EmailValidExt getInstance() { return EXTEND_VALIDATOR; } protected boolean isValidUser(String user) { Perl5Util userMatcher = new Perl5Util(); return userMatcher.match(USER_PATTERN, user); } }