EmailValidator ローカル末尾"."で不正

Emailアドレスの妥当性を判定するために

org.apache.commons.validator.EmailValidator

を利用しているようで、別部署から「アカウント末尾"."で不正となる」との報告を受け調べてみる。
標準的なメールアドレスの規格だと

・末尾"." ex) abcd.@hoeg.jp
・連続する"." ex) ab..cd@hoge.jp

はNG。
EmailValidatorはその仕様に準じているようだ。


だけど、docomoAUはその規格を守ってないらしく、アドレスとして設定できるようで
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);
    }
}