簡體   English   中英

EditText 上的電子郵件驗證 - Android

[英]Email validation on EditText - Android

我有一個電子郵件 EditText,我想使用電子郵件驗證來檢查它。

這是我的電子郵件驗證碼

public final static boolean isValidEmail(CharSequence target) {
    if (target == null) {
        return false;
    } else {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
    }
}

public void showAlertValidation() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(RegisterActivity.this);
    alertDialog.setTitle("Failed");
    alertDialog.setMessage("Invalid Email");
    alertDialog.setNegativeButton("Close", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    alertDialog.show();
}

這是我的 EditText 驗證代碼

editTextEmail= (EditText) findViewById(R.id.editTextEmail);
email = editTextEmail.getText().toString();
if(email.length() == 0) {
    editTextEmail.setError("Email required!");
    if (isValidEmail(email)) {
          Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
     }
     else{
          showAlertValidation();
     }
}

問題是 EditText 的結果。 當EditText的值為null時,運行showAlertValidation(); 但如果 EditText 的值為“email”或“email@example”或“email@example.com”,則不會運行showAlertValidation(); 我的代碼有什么問題嗎?

我們現在有一個簡單的電子郵件模式匹配器

爪哇:

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }

科特林功能:

 private fun isValidEmail(email: String): Boolean {
        return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
    }

科特林擴展:

fun String.isValidEmail() =
    !TextUtils.isEmpty(this) && Patterns.EMAIL_ADDRESS.matcher(this).matches()

您錯誤地將EditText文本長度與 0 進行比較,並且只有當它為真時,您才執行驗證邏輯。

這是正確的代碼:

 @Override
        public void onClick(View v) {
            String email = editTextEmail.getText().toString();
            if(email.length() != 0) {
                if (isValidEmail(email)) {
                    Toast.makeText(getApplicationContext(), "Valid email address!", Toast.LENGTH_SHORT).show();
                }
                else{
                    editTextEmail.setError("Email required!");
                    showAlertValidation();
                }
            }
            else{
                editTextEmail.setError("Email required!");
            }
        }

最好制作一個驗證電子郵件的類。 這樣您就可以在任何需要的地方重復使用它。 您甚至不需要將 edittext 的文本放在單獨的字符串中。 創建以下類:

public class EmailValidator {
private Pattern pattern;
private Matcher matcher;
private static EmailValidator sInstance;


public static EmailValidator getInstance() {
    if (sInstance == null) {
        sInstance = new EmailValidator();
    }
    return sInstance;
}
private static final String EMAIL_PATTERN =
        "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
                + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

public EmailValidator() {
    pattern = Pattern.compile(EMAIL_PATTERN);
}

public boolean validate(final String hex) {

    matcher = pattern.matcher(hex);
    return matcher.matches();

}}

現在使用這個類來檢查 edittext 的電子郵件的驗證,如下所示:

if(!EmailValidator.getInstance().validate(editTextEmail.getText().toString().trim())){
                    editTextEmail.setError("Invalid email address");
                }

希望這會有所幫助。

我認為這是您犯錯誤的地方(EditText 驗證代碼):

editTextEmail= (EditText) findViewById(R.id.editTextEmail);
email = editTextEmail.getText().toString();
if(email.length() == 0) {
    editTextEmail.setError("Email required!");

}
else if (isValidEmail(email)) {
              Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
         }
         else{
              showAlertValidation();
         }

在使用 String.trim() 檢查電子郵件字符串的長度之前,您應該清除空格“”;

if(email.trim().length() == 0) {//code here}

問題是你的 if 條件

if(email.length() == 0) 
    {
        editTextEmail.setError("Email required!");
        if (isValidEmail(email)) 
            {
                Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
            }
        else
            {
                showAlertValidation();
            }
    }

因為它僅在您的 editText 為空時驗證您的電子郵件地址。 你可以做的是:

email.addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
                {

                }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
                {

                }

            @Override
            public void afterTextChanged(Editable s)
                {
                    if(s.length() > 0) 
                        {
                            if (isValidEmail(email)) 
                                {
                                    editTextEmail.setError(null);
                                    Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
                                }
                            else
                               {
                                    Toast.makeText(getApplicationContext(),"valid email address Required",Toast.LENGTH_SHORT).show();
                               }
                        }
                }
        });

暫無
暫無

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

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