【问题标题】:Email Validation on EditText in androidandroid中EditText上的电子邮件验证
【发布时间】:2014-01-02 12:33:35
【问题描述】:

我编写了以下登录代码,但是当我在 email-id 后输入“\”时,它接受并成功登录(它不接受任何其他符号或字符只接受“\”)。

我不希望它使用“\”登录。`

@Override
public void onCreate(Bundle savedInstanceState) {
    try {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        setContentView(R.layout.main);
        WiztangoBaseApplication.InitDialogBox(WiztangoActivity.this);

        this.pref = PreferenceManager.getDefaultSharedPreferences(this);
        loginStatus = (TextView)findViewById(R.id.login_status);
        register = (Button) findViewById(R.id.btnregister);
        register.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                RegisterIntent();
            }
        });

        login = (Button) findViewById(R.id.btlogin);
        password = (EditText) findViewById(R.id.txtPwd);
        username = (EditText) findViewById(R.id.txtemail);
        saveLoginCheckBox = (CheckBox)findViewById(R.id.saveLoginCheckBox);
        pref = getSharedPreferences(Constants.PREFS_NAME,
                MODE_PRIVATE);
        String usernamestr = pref.getString(Constants.PREF_USERNAME, "");
        String passwordsharestr = pref.getString(Constants.PREF_PASSWORD,
        "");
        username.setText(usernamestr);
        password.setText(passwordsharestr);
        saveLogin = pref.getBoolean("saveLogin", false);
        if (saveLogin == true) {
            username.setText(usernamestr);
            password.setText(passwordsharestr);
            saveLoginCheckBox.setChecked(true);
        }

        login.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    //Constants.clearInfo();
                    getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE)
                    .edit()
                    .putString(Constants.PREF_USERNAME,
                            username.getText().toString())
                            .putString(Constants.PREF_PASSWORD,
                                    password.getText().toString())
                                    .putString(Constants.PREF_CHECKED, "TRUE")
                                    .commit();


                    if (username.getText().toString().trim().equals("")) {
                        username.setError(Html
                                .fromHtml("Please Enter Username"));
                        username.requestFocus();
                    } else if (password.getText().toString().trim()
                            .equals("")) {
                        password.setError(Html
                                .fromHtml("Please Enter Password"));
                        password.requestFocus();
                    } else {
                        if (Constants
                                .checkInternetConnection(WiztangoActivity.this)) {
                            Constants.userpass = password.getText()
                            .toString();
                            new AuthenticData().execute();
                        } else {
                            WiztangoBaseApplication.ShowThisDialog("Error",
                            "Please check internet connection.");
                        }

                        if (saveLoginCheckBox.isChecked()) {

                            prefEditor.putBoolean("saveLogin", true);
                            prefEditor.putString(Constants.PREF_USERNAME,
                                    username.getText().toString());
                            prefEditor.putString(Constants.PREF_PASSWORD,
                                    password.getText().toString());
                            saveLoginCheckBox.setChecked(true);
                            prefEditor.commit();
                        } else {

                            SharedPreferences mPreferences = getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE); 
                            SharedPreferences.Editor editor=mPreferences.edit();

                            editor.remove(Constants.PREF_USERNAME);
                            editor.remove(Constants.PREF_PASSWORD);
                            editor.commit();


                        }
                    }

                } catch (Exception e) {
                    Log.e("Exception In Wiztango/", e.toString());
                    e.printStackTrace();
                }
            }
        });
    } catch (Exception e) {
        Log.e("Exception In Wiztango/", e.toString());
        e.printStackTrace();
    }
}

【问题讨论】:

标签: android android-edittext email-validation


【解决方案1】:

内置模式提供电子邮件验证,例如:

if (!android.util.Patterns.EMAIL_ADDRESS.matcher(emailStr).matches() && !TextUtils.isEmpty(emailStr)) {
    emailEditText.setError("Invalid Email");
    emailEditText.requestFocus();
}

【讨论】:

    【解决方案2】:

    嘿,在这里查看这个答案:https://stackoverflow.com/a/7882950/1739882

    上面写着:

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

    【讨论】:

      【解决方案3】:

      您可以使用此代码检查电子邮件是否有效:

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

      【讨论】:

        【解决方案4】:

        最佳方法

        用一种方法验证电子邮件和 isEmpty。

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

        【讨论】:

          【解决方案5】:
          public static boolean isEmailValid(String email) {
                  boolean isValid = false;
          
                  String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
                  CharSequence inputStr = email;
          
                  Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
                  Matcher matcher = pattern.matcher(inputStr);
                  if (matcher.matches()) {
                      isValid = true;
                  }
                  return isValid;
              }
          

          【讨论】:

          • -1,不要使用简单的正则表达式来验证电子邮件地址。该正则表达式不会验证完全有效的电子邮件地址,例如,.museum TLD。
          【解决方案6】:

          尝试以下方法来验证电子邮件地址。

          private boolean validateEmail(EditText editText, String p_nullMsg, String p_invalidMsg)
          {
              boolean m_isValid = false;
              try
              {
                  if (p_editText != null)
                  {
                      if(validateForNull(editText,p_nullMsg))
                      {
                          Pattern m_pattern = Pattern.compile("([\\w\\-]([\\.\\w])+[\\w]+@([\\w\\-]+\\.)+[A-Za-z]{2,4})");
                          Matcher m_matcher = m_pattern.matcher(editText.getText().toString().trim());
                          if (!m_matcher.matches() &&  editText.getText().toString().trim().length() > 0)
                          {
                              m_isValid = false;
                              editText.setError(p_invalidMsg);
                          }
                          else
                          {
                              m_isValid = true;
                          }
                      }
                      else
                      {
                          m_isValid = false;
                      }
                  }
                  else
                  {
                      m_isValid = false;
                  }
              }
              catch(Throwable p_e)
              {
                  p_e.printStackTrace(); // Error handling if application crashes
              }
              return m_isValid;
          }
          

          【讨论】:

          • -1,不要使用简单的正则表达式来验证电子邮件地址。该正则表达式不会验证完全有效的电子邮件地址,例如,.museum TLD。
          【解决方案7】:

          试试这个代码:--

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

          【讨论】:

          • -1,不要使用简单的正则表达式来验证电子邮件地址。该正则表达式不符合各种 RFC,并且会因允许地址过长而失败。本地部分的验证也是虚假的,RFC 允许在此处添加 很多 标点符号。
          猜你喜欢
          • 2014-09-18
          • 1970-01-01
          • 2012-03-10
          • 2012-10-08
          • 2015-08-01
          • 2011-11-29
          • 2017-05-30
          • 2013-09-25
          相关资源
          最近更新 更多