【问题标题】:How to check that entered text is an email address? Android [duplicate]如何检查输入的文本是否为电子邮件地址?安卓[重复]
【发布时间】:2013-07-15 19:19:16
【问题描述】:

这是我的代码。现在我想检查一下 if 条件:

public static boolean isEmailValid(String email) { boolean isValid = false;
String expression = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
  + "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
  + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\."
  + "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
  + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
  + "([a-zA-Z]+[\\w-]+\\.)+[a-zA-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;

【问题讨论】:

    标签: android


    【解决方案1】:

    第一和你的方式

    试试:你的字符串表达式应该是

     String expression = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
    + "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
    + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\."
    + "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
    + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
    + "([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$";
    

    第二种方式

    你可以使用android.util.Patterns.EMAIL_ADDRESS.matcher(inputStr).matches()

    所以你的方法应该是

    public static boolean isEmailValid(String email) {    
    CharSequence inputStr = email;    
    return android.util.Patterns.EMAIL_ADDRESS.matcher(inputStr).matches();
    }
    

    【讨论】:

    • +1 用于提及android.util.Patterns.EMAIL_ADDRESS,但请注意第一种方式的表达不正确 - 例如有效电子邮件:email@1.2.3.4 将不匹配
    • @lopisan 我使用第二种方式!感谢您指出,哦,它不适用于 email@1.2.3.4 !所以,我已经根据你的表达更新了答案!
    • @Tarsem im 使用此条件进一步检查 if (isEmailValid(email)) { Toast.makeText(getApplicationContext(), "Email ID is not valid !.", Toast.LENGTH_LONG)。显示(); }
    • @GauravMehta 好的!
    • @taesem 它不工作,如果我输入 abc,它总是会通过,然后它也会通过我现在做什么的条件? :(
    【解决方案2】:

    我会这样定义你的函数:

    public static boolean isEmailValid(String email) {
      String expression = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
        + "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
        + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\."
        + "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
        + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
        + "([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$";
    
      Matcher matcher = Pattern.compile(expression, Pattern.CASE_INSENSITIVE).matcher(email);
      return matcher.matches();
    }
    

    然后像这样测试有效的电子邮件:

    if( isEmailValid("something@example.com") ) {
      // Email is valid
    } else {
      // Email is not valid
    }
    

    PS:我没有检查你的正则表达式的有效性,只是整理了剩下的代码

    【讨论】:

      【解决方案3】:

      为什么不能用这是最好的办法

      boolean isEmailValid(CharSequence email) {
         return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
      }
      

      【讨论】:

        【解决方案4】:

        另一个选项是从 API 级别 8 开始的内置模式:

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

        【讨论】:

          猜你喜欢
          • 2015-09-03
          • 2011-09-01
          • 2012-06-27
          • 2016-07-23
          • 2011-08-17
          • 1970-01-01
          • 2013-03-16
          • 2016-08-20
          • 2012-09-09
          相关资源
          最近更新 更多