【问题标题】:Android Email validation: conditions for characters after "."Android 电子邮件验证:“.”后字符的条件
【发布时间】:2017-09-06 09:47:07
【问题描述】:

我希望为电子邮件设置一个验证条件,在“.xxx”(电子邮件终止,例如:john123@gmail.xxx)之后,字符限制小于 3 但仅大于 2(例如:如果 john123 则无效@gmail.c 或 @gmail.commm)。

这是我的尝试:

public final boolean validEmail(String target){

        boolean valid_dot_com

        if(target.toString().contains(".")){

           int indexDot = target.toString().indexOf(".");

           //  substring from char containing "." to last char
           String temp = target.toString().substring(indexDot,         
           target.length());

           if(temp.length()<2 && temp.length()>3){
              valid_dot_com = false;
            }
        }    

   return valid_dot_com && Patterns.EMAIL_ADDRESS.matcher(target).matches();   
}

但是,此代码没有返回我需要的结果。

我确实有这样的理论,即 Patterns.EMAIL_ADDRESS 会覆盖我的布尔值,导致条件检查变为真,即使它不是。

请赐教!

编辑:

我找到了答案!

通过在线正则表达式生成器:https://regex101.com/ 我已经能够生成自定义正则表达式模式来编译和进行验证。其余代码类似于简单的条件。

感谢大家的回复!

【问题讨论】:

  • 请使用正则表达式进行电子邮件验证。
  • @Eugene 只需在您的代码中进行简单的修改,查看下面的答案

标签: java android validation email


【解决方案1】:

您可以使用内置功能。

if (!Patterns.EMAIL_ADDRESS.matcher(et_email.getText().toString()).matches()) 

{ 你的代码。 }

【讨论】:

  • 如果解决了则标记它正确,以便其他人轻松获得答案>
【解决方案2】:

使用这个:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

请参考link

【讨论】:

    【解决方案3】:

    试试这个自定义模式

    String EMAIL_PATTERN = "^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$";
    
    public final boolean validateEmail(String target) {
        if (target !=null && target.length() > 1) {
            Pattern pattern = Pattern.compile(EMAIL_PATTERN);
            Matcher matcher = pattern.matcher(target);
            return matcher.matches();
        } else if (target.length() == 0) {
            return false;
        } else {
            return false;
        }
    }
    

    【讨论】:

    【解决方案4】:

    试试这个验证方法

      public static final Pattern VALID_EMAIL_ADDRESS_REGEX =
            Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);
    
    public static boolean validate(String emailStr) {
        Matcher matcher = VALID_EMAIL_ADDRESS_REGEX.matcher(emailStr);
        return matcher.find();
    }
    

    【讨论】:

      【解决方案5】:

      使用这个

      !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches()
      

      【讨论】:

        【解决方案6】:

        以下将验证电子邮件。

        public static boolean validateEmail(String email) {
        
                Pattern emailPattern = Pattern.compile(".+@.+\\.[a-z]+");
                Matcher emailMatcher = emailPattern.matcher(email);
                return emailMatcher.matches();
        
            }
        

        【讨论】:

          【解决方案7】:

          这使用点作为分隔符拆分电子邮件字符串,并获取第二个字符串值(在索引 1 处,因为它从 0 开始)并比较它以检查其在点之后是否为 3 或小于 1。

          String st = email.split("\\.")[1];
          if(st.length() <=3 && st.length() > 1) {
             // its 3 or less but greater than 1 after dot .
          }
          

          【讨论】:

          • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。提及为什么这个答案比其他答案更合适也没有什么坏处。
          【解决方案8】:

          试试这个

          public final boolean validEmail(String target) {
                  Log.d("RESULT", "----------------------------------Receieved: " + target);
                  Log.d("RESULT", "----------------------------------String Length: " + target.length());
                  Log.d("RESULT", "----------------------------------Index of Dot: " + target.toString().indexOf("."));
          
                  boolean valid_dot_com = true;
          
                  if (target.toString().contains(".")) {
          
                      int indexDot = target.toString().indexOf(".");
          
                      //  substring from char containing "." to last char
                      String temp = target.toString().substring(indexDot + 1,
                              target.length());
                      Log.d("RESULT", "----------------------------------Sub String : " + temp);
                      Log.d("RESULT", "----------------------------------Sub String Lenght  : " + temp.length());
                      if ((temp.length() > 3)) {
                          valid_dot_com = false;
                      }
                  }
          
                  return valid_dot_com && Patterns.EMAIL_ADDRESS.matcher(target).matches();
              }
          

          【讨论】:

            【解决方案9】:

            已经回复Here

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

            【讨论】:

              【解决方案10】:

              将您的电子邮件字符串传递给下面的这个函数,它会返回布尔值,无论它是否有效

              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;
              }
              

              【讨论】:

                猜你喜欢
                • 2014-02-17
                • 2017-05-30
                • 2016-07-08
                • 1970-01-01
                • 2013-09-25
                • 2013-01-18
                • 2016-05-21
                • 2014-04-23
                • 2014-09-18
                相关资源
                最近更新 更多