【问题标题】:Email and phone Number Validation in androidandroid中的电子邮件和电话号码验证
【发布时间】:2014-04-25 16:00:21
【问题描述】:

我的申请中有一个注册表单,我正在尝试对其进行验证。我在验证电话号码和电子邮件字段时遇到了一些验证问题。

这是我的代码:

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;
}

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

【问题讨论】:

标签: android


【解决方案1】:

用于电子邮件地址验证

private boolean isValidMail(String email) {

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

    return Pattern.compile(EMAIL_STRING).matcher(email).matches();

}

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) {
    if(!Pattern.matches("[a-zA-Z]+", phone)) {
        return phone.length() > 6 && phone.length() <= 13;
    }
    return false;
}

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

【讨论】:

  • 此控件不足以验证电话号码。用户可能会粘贴一个像“abcdefgh”这样的字符串,它会返回true。
  • 是的,“电话”类型也很整洁。
  • @BarışcanKayaoğlu 我有错误并更新我的答案。
  • android.util.Patterns..PHONE.matcher(phone).matches() 不适合我
  • PHONE patterns android.util.Patterns.PHONE:此模式旨在搜索看起来可能是任意文本中的电话号码的内容,而不是验证某个内容是否实际上是电话号码.它会遗漏很多合法的电话号码。
【解决方案2】:

在Android中使用Pattern包来匹配邮箱和电话的输入验证

喜欢

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

【讨论】:

  • @Nambi 请告诉我我把这段代码放在哪里,我是这个 android 开发的新代码。
  • Doc 说这不是为了验证某物是否真的是电话号码。它会遗漏很多合法的电话号码。
  • Patterns 类中的 PHONE 模式仅用于搜索。
  • 这还不够,你还可以添加点(.)或者超过13个字符...
  • 这不是检查有效电话号码的有效答案
【解决方案3】:

试试这个

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】:

    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;
    }
    

    【讨论】:

    • !TextUtils.isEmpty(email) 不要使用它,因为如果有单个空格“”,它将返回 true。使用 email.trim().equals("");
    • !TextUtils.isEmpty(email) 将返回 true 但 Patterns.EMAIL_ADDRESS.matcher(email).matches();惯于。最终结果将是正确的。
    • 是的,我和你在一起。我只是说用那个来检查空。
    • 来自 android 源代码: PHONE 模式旨在搜索看起来可能是任意文本中的电话号码的内容,而不是用于验证某个内容是否实际上是电话号码。它会遗漏很多合法的电话号码。
    【解决方案5】:

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

    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;
    }
    

    【讨论】:

      【解决方案6】:

      试试这个:

      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();
      }
      

      【讨论】:

        【解决方案7】:

        他想要一个优雅而合适的解决方案,试试这个小型的正则表达式模式匹配器。

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

        模式细分:-

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

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

        【讨论】:

          【解决方案8】:
          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;
              }
          

          【讨论】:

          • checkForEmail(); checkForMobile();
          • checkForEmail(); checkForMobile();这些是对该功能的调用,您可以在所需的位置调用添加到主题,以便该功能将调用
          【解决方案9】:

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

          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
          

          }

          【讨论】:

            【解决方案10】:

            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();
            }
            

            【讨论】:

              【解决方案11】:

              //验证类

              公共类 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")
                      }
                  }
              

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

              【讨论】:

                【解决方案12】:

                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()
                }
                

                【讨论】:

                  【解决方案13】:

                  内置的 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()
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 2018-05-05
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-04-05
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-12-03
                    • 2013-11-07
                    相关资源
                    最近更新 更多