如何在不使用JavaScript
和正则表达式的情况下检查EditText
的文本是否为电子邮件地址?
这里我使用了inputtype="textEmailAddress"
,这样可以工作,但没有显示错误消息。
如何在不使用JavaScript
和正则表达式的情况下检查EditText
的文本是否为电子邮件地址?
这里我使用了inputtype="textEmailAddress"
,这样可以工作,但没有显示错误消息。
在 Android 2.2+ 上使用以下方法:
boolean isEmailValid(CharSequence email) {
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
例如:EditText emailid = (EditText) loginView.findViewById(R.id.login_email);
String getEmailId = emailid.getText().toString();
// Check if email id is valid or not
if (!isEmailValid(getEmailId)){
new CustomToast().Show_Toast(getActivity(), loginView,
"Your Email Id is Invalid.");
}
/**
* 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();
}
将您的编辑文本字符串传递给此函数。
为了进行正确的电子邮件验证,您需要服务器端身份验证。
注意:现在在Android中有一个内置方法,请参见下面的答案。
String
实现了 CharSequence
接口,因此我认为从 email
到 inputStr
的转换是多余的。 - nuala<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>
步骤 2:
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
步骤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)
});
}
}
我编写了一个扩展EditText的库,它本身支持一些验证方法,并且非常灵活。目前原生支持(通过xml属性)的验证方法有:
您可以在此处查看: 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"
/>
这个库还有一个测试应用程序。
这是一个验证电子邮件字段的应用程序截图。
正如其中一个答案中提到的,您可以使用以下 Patterns
类:
public final static boolean isValidEmail(CharSequence target) {
if (target == null)
return false;
return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
如果您的应用程序支持的 API 级别低于 8,那么您可以简单地将 Patterns.java
文件复制到您的项目中并进行引用。您可以从此链接获取 Patterns.java
的源代码。
android.util.Patterns
包。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();
String email;
check.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
checkEmail(email);
if (checkMail) {
System.out.println("Valid mail Id");
}
}
});
}
}
public static boolean checkEmail(String email) {
Pattern EMAIL_ADDRESS_PATTERN = Pattern
.compile("[a-zA-Z0-9+._%-+]{1,256}" + "@"
+ "[a-zA-Z0-9][a-zA-Z0-9-]{0,64}" + "(" + "."
+ "[a-zA-Z0-9][a-zA-Z0-9-]{0,25}" + ")+");
return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}
尝试使用这个简单易用的代码进行电子邮件地址验证。
String email = inputEmail.getText().toString().trim();
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches())
{
inputEmail.setError("Enter Valid Email Address");
inputEmail.requestFocus();
}
Apache Commons Validator可以像其他答案中提到的那样使用。
步骤1:从这里下载jar文件。
步骤2:将其添加到您的项目库中。
导入:
import org.apache.commons.validator.routines.EmailValidator;
String email = "myName@example.com";
boolean valid = EmailValidator.getInstance().isValid(email);
并允许本地地址:
boolean allowLocal = true;
boolean valid = EmailValidator.getInstance(allowLocal).isValid(email);
试试这个:
public boolean isValidEmail(String email) {
return (PatternsCompat.EMAIL_ADDRESS.matcher(email).matches());
}
谢谢!