验证EditText中的电子邮件

时间:2011-10-02 10:34:44

标签: android regex email android-edittext

我想验证EditText中引入的电子邮件,以及我已经拥有的代码:

  

final EditText textMessage =(EditText)findViewById(R.id.textMessage);

     

final TextView text =(TextView)findViewById(R.id.text);

    textMessage.addTextChangedListener(new TextWatcher() { 
        public void afterTextChanged(Editable s) { 
            if (textMessage.getText().toString().matches("[a-zA-Z0-9._-]+@[a-z]+.[a-z]+") && s.length() > 0)
            {
                text.setText("valid email");
            }
            else
            {
                text.setText("invalid email");
            }
        } 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
        public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    }); 

问题在于,当我在“@”之后引入3个字符时,它会显示消息“有效电子邮件”,当我在介绍完整的电子邮件时它必须出现。

任何建议?

谢谢大家!

9 个答案:

答案 0 :(得分:23)

只需更改正则表达式,如下所示:

"[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"

因为。 (点)表示在你的点之前匹配任何单个char.ADD双反斜杠代表一个真正的点。

答案 1 :(得分:15)

我编写了一个扩展EditText的库,它本身支持一些验证方法,实际上非常灵活。

目前,正如我所写,原生支持(通过 xml属性)验证方法是:

  1. regexp :for custom regexp
  2. 数字:仅限数字字段
  3. alpha :仅限alpha字段
  4. alphaNumeric :猜猜是什么?
  5. 电子邮件:检查该字段是否为有效的电子邮件
  6. creditCard :使用Luhn算法检查该字段是否包含有效的信用卡
  7. 手机:检查该字段是否包含有效的电话号码
  8. domainName :检查该字段是否包含有效的域名(始终在API级别< 8中通过测试)
  9. ipAddress :检查该字段是否包含有效的IP地址 webUrl:检查该字段是否包含有效URL(始终在API级别< 8中传递测试)
  10. nocheck :它不会检查任何内容。 (默认)
  11. 您可以在此处查看:https://github.com/vekexasia/android-form-edittext

    希望你喜欢它:)

    在我链接的页面中,您还可以找到电子邮件验证的示例。我将复制相关片段:

    <com.andreabaccega.widget.FormEditText
           style="@android:style/Widget.EditText"
           whatever:test="email"
           android:id="@+id/et_email"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:hint="@string/hint_email"
           android:inputType="textEmailAddress"
           />  
    

    还有一个测试应用程序展示了库的可能性。

    这是验证电子邮件字段的应用的屏幕截图。

    email validation done thorugh xml+library

答案 2 :(得分:5)

public boolean validateEmail(String email) {

Pattern pattern;
Matcher matcher;
String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return matcher.matches();

}

答案 3 :(得分:4)

如果您使用的是API 8或更高版本,则可以使用随时可用的Patterns类来验证电子邮件。示例代码:

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

如果您甚至支持少于8的API级别,那么您只需将Patterns.java文件复制到项目中并引用它即可。您可以从this link

获取Patterns.java的源代码

答案 4 :(得分:3)

这里有几个不错的选项,包括用于API 8 +的android.util.Patterns.EMAIL_ADDRESS。

https://stackoverflow.com/a/7882950/1011746

答案 5 :(得分:1)

请勿在代码中执行此操作。您可以使用EditText的inputType属性。

    <EditText 
        android:id="@+id/edit_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"/>

答案 6 :(得分:1)

尝试这种模式.....

editText.addTextChangedListener(new TextWatcher(){

        @Override
        public void afterTextChanged(Editable s) {
            pattern = Pattern.compile(".+@.+\\.[a-z]+");
            matcher = pattern.matcher(editText.getText().toString());

            if(matcher.matches()) {
                Log.i("Test","--------Valid Email--------");
            }else {

                Log.i("Test","--------Invalid Email------");
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

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

        } 
    }); 

答案 7 :(得分:0)

private boolean validateEmailAddress(CharSequence emailAddress)
{

  if( Build.VERSION.SDK_INT >= 8 )
  {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(emailAddress).matches();
  }

  Pattern pattern;
  Matcher matcher;
  String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
  pattern = Pattern.compile(EMAIL_PATTERN);
  matcher = pattern.matcher(emailAddress);

  return matcher.matches();
}

答案 8 :(得分:0)

//验证您的电子邮件地址格式。 Ex-abci@gmail.com

public boolean emailValidator(String email) 
{
    Pattern pattern;
    Matcher matcher;
    final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    pattern = Pattern.compile(EMAIL_PATTERN);
    matcher = pattern.matcher(email);
    return matcher.matches();
}