簡體   English   中英

如何通過電子郵件發送帶有字符的兩個字節的地址驗證以進行日語輸入?

[英]How to email address validation with character two bytes for input from Japanese?

我正在嘗試編寫一個程序,要求用戶輸入電子郵件地址。 然后我驗證其是否為有效的電子郵件地址,並以兩種情況輸入正常並輸入兩個字節的特殊字符

firstname―lastname@domain.com應該是有效的,但被認為是無效的。 所有的情況下是正確的https://blogs.msdn.microsoft.com/testing123/2009/02/06/email-address-test-cases/唯一情況firstname―lastname@domain.com返回false

這是我的代碼,我使用的是Unicode半角和全角格式http://jrgraphix.net/r/Unicode/FF00-FFEF

大小寫連字符減-> FF0D的錯誤返回false。 預期結果:返回true

private VALIDATE_CODE validateInput(String username, String password) {

        if (username.length() == 0 || password.length() == 0) {
            return VALIDATE_CODE.EMPTY_USERNAME_PASSWORD;
        }

        if (!StringUtil.isValidEmail(username)) {
            return VALIDATE_CODE.INVALID_USERNAME_PASSWORD;
        }
        return VALIDATE_CODE.SUCCESS;
    }

 public static boolean isValidEmail(CharSequence email) {
    boolean validFullSize = ValidateUtil.EMAIL_ADDRESS_JAPANESE.matcher(email).matches();
    boolean validHaftSize = android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    return !TextUtils.isEmpty(email) && (validFullSize || validHaftSize);
}

public static final Pattern EMAIL_ADDRESS
    = Pattern.compile(
        "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
        "\\@" +
        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
        "(" +
            "\\." +
            "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
        ")+"
    );


public static final Pattern EMAIL_ADDRESS_JAPANESE
        = Pattern.compile(
        "[\uFF41-\uFF5A\uFF21-\uFF3A\uFF10-\uFF19\\\uFF0B\\\uFF0E\\\uFF3F\\\uFF05\\\uFF0D\\\uFF0B]{1,256}" +
                "\\\uFF20" +
                "[\uFF41-\uFF5A\uFF21-\uFF3A\uFF10-\uFF19][\uFF41-\uFF5A\uFF21-\uFF3A\uFF10-\uFF19\\\uFF0D]{0,64}" +
                "(" +
                "\\\uFF0E" +
                "[\uFF41-\uFF5A\uFF21-\uFF3A\uFF10-\uFF19][\uFF41-\uFF5A\uFF21-\uFF3A\uFF10-\uFF19\\\uFF0D]{0,25}" +
                ")+"
);

如果有人可以幫助,將不勝感激!

firstname-lastname@domain.com應該是有效的

不是。 此地址中沒有@ (U + 0040 Commercial At)符號,只有一個 (U + FF20全角商用地址),它不是有效的本地部分/域分隔符。

(在本地部分和域中,全角字符也可能會出現傳遞問題;從技術上講,這本身可能不會使地址無效,但幾乎可以肯定是輸入錯誤)。

通常,當接受日語用戶的輸入時,最好將所有“兼容性”全角和半角字符轉換為普通ASCII字符。 使用Unicode Normalizer那么您可以嘗試驗證以下字符串:

input = Normalizer.normalize(input, Normalizer.Form.NFKC);
"firstname―lastname@domain.com"

請注意,本例中的破折號既不是ASCII連字符也不是全角格式。 這是U + 2015單杠。 不知道那是從哪里來的。 在本地化的國際化電子郵件地址中從技術上講是有效的,但是許多電子郵件地址驗證程序將拒絕它,因為它很奇怪,而且可能不是這個意思。

不要花費太多時間來嘗試驗證電子郵件地址。 您可以瘋狂地嘗試以正則表達式的形式復制RFC的確切規則(甚至沒有人使用並且實際上無法使用的規則),也可以瘋狂地嘗試實施自己的想法,即可能正確的地址。 最好避免瘋狂,並保持簡單。 例如,它是否包含一個@然后是一個. 然后讓我們嘗試發送給它,看看會發生什么

您是否檢查了正則表達式是否有效? 我認為問題出在正則表達式中。

使用此正則表達式希望對您有所幫助。

^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$

已在abc_d@gmail.com上進行了測試。

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

防爆。 字符串str = edittextemail.gettext()。tostring();

if(isValidEmail(str)){ // valid email is return true.
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM