Android中的电子邮件和电话号码验证

时间:2014-03-19 12:07:18

标签: android

我在我的应用程序中有一个注册表单,我正在尝试验证。在验证电话号码和电子邮件字段时,我的验证遇到​​了一些问题。

这是我的代码:

private boolean validate() {

    String MobilePattern = "[0-9]{10}";
    //String email1 = email.getText().toString().trim();
    String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";

    if (name.length() > 25) {

        Toast.makeText(getApplicationContext(), "pls enter less the 25 character in user name", Toast.LENGTH_SHORT).show();
        return true;

    } else if (name.length() == 0 || number.length() == 0 || email.length() == 
             0 || subject.length() == 0 || message.length() == 0) {

        Toast.makeText(getApplicationContext(), "pls fill the empty fields", Toast.LENGTH_SHORT).show();
        return false;

    } else if (email.getText().toString().matches(emailPattern)) { 

        //Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
        return true;

    } else if(!email.getText().toString().matches(emailPattern)) { 

        Toast.makeText(getApplicationContext(),"Please Enter Valid Email Address",Toast.LENGTH_SHORT).show();
        return false;

    } else if(number.getText().toString().matches(MobilePattern)) {

        Toast.makeText(getApplicationContext(), "phone number is valid", Toast.LENGTH_SHORT).show();
        return true;

    } else if(!number.getText().toString().matches(MobilePattern)) {

        Toast.makeText(getApplicationContext(), "Please enter valid 10 digit phone number", Toast.LENGTH_SHORT).show();
        return false;
    }

    return false;
}

我已使用上面的代码进行验证。我面临的问题是电话号码和电子邮件验证,只有一个验证工作正常。例如,如果我注释掉电话号码验证,则电子邮件验证工作正常。如果我注释掉电子邮件验证,则电话号码验证工作正常。如果同时使用这两种验证,则无效。

13 个答案:

答案 0 :(得分:57)

用于电子邮件地址验证

private boolean isValidMail(String email) {
    boolean check;
    Pattern p;
    Matcher m;

    String EMAIL_STRING = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
            + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

    p = Pattern.compile(EMAIL_STRING);

    m = p.matcher(email);
    check = m.matches();

    if(!check) {
        txtEmail.setError("Not Valid Email");
    }
    return check;
}

private boolean isValidMail(String email) {
   return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}

用于移动验证

对于有效手机您需要考虑7位到13位数,因为某些国家/地区有7位数的手机号码。如果您的主要目标是您自己的国家/地区,那么您可以匹配长度。假设印度拥有10位数的手机号码。此外,我们无法检查手机号码必须以9或8或任何内容开头。

对于手机号码,我使用了这两个功能:

private boolean isValidMobile(String phone) {
    boolean check=false;
    if(!Pattern.matches("[a-zA-Z]+", phone)) {
        if(phone.length() < 6 || phone.length() > 13) {
        // if(phone.length() != 10) { 
            check = false;
            txtPhone.setError("Not Valid Number");
        } else {
            check = true;
        }
    } else {
        check=false;
    }
    return check;
}

private boolean isValidMobile(String phone) {
    return android.util.Patterns.PHONE.matcher(phone).matches();    
}

答案 1 :(得分:52)

在Android中使用Pattern包来匹配电子邮件和手机的输入验证

喜欢

android.util.Patterns.EMAIL_ADDRESS.matcher(input).matches();
android.util.Patterns.PHONE.matcher(input).matches();

答案 2 :(得分:15)

Android有build-in patterns的电子邮件,电话号码等,如果您正在为Android API等级8及以上版本构建,则可以使用

private boolean isValidEmail(CharSequence email) {
    if (!TextUtils.isEmpty(email)) {
        return Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }
    return false;
}

private boolean isValidPhoneNumber(CharSequence phoneNumber) {
    if (!TextUtils.isEmpty(phoneNumber)) {
        return Patterns.PHONE.matcher(phoneNumber).matches();
    }
    return false;
}

答案 3 :(得分:6)

试试这个

public class Validation {

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

    public static final boolean isValidPhoneNumber(CharSequence target) {
        if (target.length()!=10) {
            return false;
        } else {
            return android.util.Patterns.PHONE.matcher(target).matches();
        }
    }

}

答案 4 :(得分:2)

试试这个:

extMobileNo.addTextChangedListener(new MyTextWatcher(extMobileNo));

private boolean validateMobile()    {   

    String mobile =extMobileNo.getText().toString().trim();
    if(mobile.isEmpty()||!isValidMobile(mobile)||extMobileNo.getText().toString().toString().length()<10 || mobile.length()>13 )

    {
            inputLayoutMobile.setError(getString(R.string.err_msg_mobile));
        requestFocus(extMobileNo);
        return false;
    }

    else {
        inputLayoutMobile.setErrorEnabled(false);
    }

    return true;
}

private static boolean isValidMobile(String mobile)
{
    return !TextUtils.isEmpty(mobile)&& Patterns.PHONE.matcher(mobile).matches();
}

答案 5 :(得分:2)

他想要一个优雅和正确的解决方案尝试这个小的正则表达式模式匹配器。

这是专门针对印度的。(第一个数字不能为零,然后可以是任意9个数字) return mobile.matches("[1-9][0-9]{9}");

模式细分: -

[1-9]匹配第一个数字并检查数字(整数)是否介于(包括)1到9之间 [0-9]{9}匹配相同的内容,但{9}告诉模式它必须检查即将推出的所有9位数字。

现在{9}部分可能会因国家/地区而异,因此您可能会有一个数组,用于说明电话号码中允许的位数。有些国家/地区在数字上也有一定的意义,因此您可以例外,并为这些国家的电话号码设计单独的正则表达式模式。

答案 6 :(得分:0)

我一直在使用此方法进行电子邮件验证:

public boolean checkForEmail(Context c, EditText edit) {
    String str = edit.getText().toString();
    if (android.util.Patterns.EMAIL_ADDRESS.matcher(str).matches()) {
        return true;
    }
    Toast.makeText(c, "Email is not valid...", Toast.LENGTH_LONG).show();
    return false;
}

答案 7 :(得分:0)

public boolean checkForEmail() {
        Context c;
        EditText mEtEmail=(EditText)findViewById(R.id.etEmail);
        String mStrEmail = mEtEmail.getText().toString();
        if (android.util.Patterns.EMAIL_ADDRESS.matcher(mStrEmail).matches()) {
            return true;
        }
        Toast.makeText(this,"Email is not valid", Toast.LENGTH_LONG).show();
        return false;
    }


    public boolean checkForMobile() {
        Context c;
        EditText mEtMobile=(EditText)findViewById(R.id.etMobile);
        String mStrMobile = mEtMobile.getText().toString();
        if (android.util.Patterns.PHONE.matcher(mStrMobile).matches()) {
            return true;
        }
        Toast.makeText(this,"Phone No is not valid", Toast.LENGTH_LONG).show();
        return false;
    }

答案 8 :(得分:0)

要查看电子邮件和电话号码,您需要这样做

public static boolean isValidMobile(String phone) {
    boolean check = false;
    if (!Pattern.matches("[a-zA-Z]+", phone)) {
        if (phone.length() < 9 || phone.length() > 13) {
            // if(phone.length() != 10) {
            check = false;
            // txtPhone.setError("Not Valid Number");
        } else {
            check = android.util.Patterns.PHONE.matcher(phone).matches();
        }
    } else {
        check = false;
    }
    return check;
}

public static boolean isEmailValid(String email) {
    boolean check;
    Pattern p;
    Matcher m;

    String EMAIL_STRING = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
            + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

    p = Pattern.compile(EMAIL_STRING);

    m = p.matcher(email);
    check = m.matches();

    return check;
}



String enter_mob_or_email="";//1234567890 or test@gmail.com
if (isValidMobile(enter_mob_or_email)) {// Phone number is valid

}else isEmailValid(enter_mob_or_email){//Email is valid

}else{// Not valid email or phone number

}

答案 9 :(得分:0)

XML

<android.support.v7.widget.AppCompatEditText
    android:id="@+id/et_email_contact"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:maxLines="1"
    android:hint="Enter Email or Phone Number"/>

Java

private AppCompatEditText et_email_contact;
private boolean validEmail = false, validPhone = false;     

et_email_contact = findViewById(R.id.et_email_contact);
et_email_contact.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        String regex = "^[+]?[0-9]{10,13}$";
        String emailContact = s.toString();
        if (TextUtils.isEmpty(emailContact)) {
            Log.e("Validation", "Enter Mobile No or Email");
        } else {
            if (emailContact.matches(regex)) {
                Log.e("Validation", "Valid Mobile No");
                validPhone = true;
                validEmail = false;
            } else if (Patterns.EMAIL_ADDRESS.matcher(emailContact).matches()) {
                Log.e("Validation", "Valid Email Address");
                validPhone = false;
                validEmail = true;
            } else {
                validPhone = false;
                validEmail = false;
                Log.e("Validation", "Invalid Mobile No or Email");
            }
        }
    }
});

if (validPhone || validEmail) {
    Toast.makeText(this, "Valid Email or Phone no", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(this, "InValid Email or Phone no", Toast.LENGTH_SHORT).show();
}

答案 10 :(得分:0)

//验证类

公共类EditTextValidation {

public static boolean isValidText(CharSequence target) {
    return target != null && target.length() != 0;
}

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

public static boolean isValidPhoneNumber(CharSequence target) {
    if (target.length() != 10) {
        return false;
    } else {
        return android.util.Patterns.PHONE.matcher(target).matches();
    }
}

//活动或片段

    val userName = registerNameET.text?.trim().toString()
    val mobileNo = registerMobileET.text?.trim().toString()
    val emailID = registerEmailIDET.text?.trim().toString()

    when {
        !EditTextValidation.isValidText(userName) -> registerNameET.error = "Please provide name"
        !EditTextValidation.isValidEmail(emailID) -> registerEmailIDET.error =
            "Please provide email"
        !EditTextValidation.isValidPhoneNumber(mobileNo) -> registerMobileET.error =
            "Please provide mobile number"
        else -> {
            showToast("Hello World")
        }
    }

**希望它对您有用...这是一个有效的示例。

答案 11 :(得分:0)

Kotlin中,您可以使用Extension function来验证输入

//用于电子邮件验证

 fun String.isValidEmail(): Boolean =
        this.isNotEmpty() && Patterns.EMAIL_ADDRESS.matcher(this).matches()

//用于电话验证

fun String.isValidMobile(phone: String): Boolean {
    return Patterns.PHONE.matcher(phone).matches()
}

答案 12 :(得分:0)

内置的 PHONE 模式匹配器并不适用于所有情况。

到目前为止,这是我发现的验证电话号码的最佳解决方案(Kotlin 中的代码,字符串的扩展)

fun String.isValidPhoneNumber() : Boolean {
    val patterns =  "^\\s*(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})[-. )]*(\\d{3})[-. ]*(\\d{4})(?: *x(\\d+))?\\s*$"
    return Pattern.compile(patterns).matcher(this).matches()
}