如何检查edittext的文本是否是电子邮件地址?

Dip*_*iya 110 android email-validation android-edittext

如何在edittext不使用javascript正则表达式的情况下检查电子邮件地址的文本?在这里我使用inputtype="textEmailAddress"它是工作但没有显示错误消息.

Poi*_*ull 395

boolean isEmailValid(CharSequence email) {
   return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 220

/**
 * method is used for checking valid email id format.
 * 
 * @param email
 * @return boolean true for valid false for invalid
 */
public static boolean isEmailValid(String email) {
    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(email);
    return matcher.matches();
}
Run Code Online (Sandbox Code Playgroud)

在此函数中传递编辑文本字符串.

要获得正确的电子邮件验证,您需要服


请注意,现在Android中有一个内置方法,请参阅下面的答案.

  • `String`实现`CharSequence`所以我认为从`email`到`inputStr`的转换是多余的. (7认同)

小智 13

请按照以下步骤操作

步骤1 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText_email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_below="@+id/textView_email"
        android:layout_marginTop="40dp"
        android:hint="Email Adderess"
        android:inputType="textEmailAddress" />

    <TextView
        android:id="@+id/textView_email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:text="Email Validation Example" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

第2步:

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
Run Code Online (Sandbox Code Playgroud)

第3步:

public class MainActivity extends Activity {

private EditText email;

private String valid_email;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initilizeUI();
}

/**
 * This method is used to initialize UI Components
 */
private void initilizeUI() {
    // TODO Auto-generated method stub

    email = (EditText) findViewById(R.id.editText_email);

    email.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

            // TODO Auto-generated method stub
            Is_Valid_Email(email); // pass your EditText Obj here.
        }

        public void Is_Valid_Email(EditText edt) {
            if (edt.getText().toString() == null) {
                edt.setError("Invalid Email Address");
                valid_email = null;
            } else if (isEmailValid(edt.getText().toString()) == false) {
                edt.setError("Invalid Email Address");
                valid_email = null;
            } else {
                valid_email = edt.getText().toString();
            }
        }

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

}

}
Run Code Online (Sandbox Code Playgroud)


And*_*ega 12

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

目前,我写的, 原生支持(通过XML属性)的验证方法有:

  1. regexp:用于自定义正则表达式
  2. numeric:仅用于数字字段
  3. alpha:仅限alpha字段
  4. alphaNumeric:猜怎么着?
  5. 电子邮件:检查该字段是否为有效的电子邮件
  6. creditCard:使用Luhn算法检查该字段是否包含有效的信用卡
  7. 电话:检查该字段是否包含有效的电话号码
  8. domainName:检查该字段是否包含有效的域名(始终通过API级别<8的测试)
  9. ipAddress:检查该字段是否包含有效的IP地址webUrl:检查该字段是否包含有效的URL(始终通过API级别<8的测试)
  10. nocheck:它没有检查任何东西.(默认)

你可以在这里查看: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"
       />  
Run Code Online (Sandbox Code Playgroud)

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

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

电子邮件验证完成了thorugh xml +库


Mah*_*iya 7

如其中一个答案所述,您可以使用以下Patterns课程:

public final static boolean isValidEmail(CharSequence target) {
    if (target == null) 
        return false;

    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
Run Code Online (Sandbox Code Playgroud)

如果您甚至支持API级别低于8,那么您只需将Patterns.java文件复制到项目中并引用它即可.您可以Patterns.java从此链接获取源代码


Rah*_*cha 5

在您的情况下,您可以使用android.util.Patterns package.

EditText email = (EditText)findViewById(R.id.user_email);

if(Patterns.EMAIL_ADDRESS.matcher(email.getText().toString()).matches())
    Toast.makeText(this, "Email is VALID.", Toast.LENGTH_SHORT).show();
else
    Toast.makeText(this, "Email is INVALID.", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)