【问题标题】:How to check email validation?What is the error?如何检查电子邮件验证?错误是什么?
【发布时间】:2015-05-07 18:16:44
【问题描述】:

我尝试了这个简单的例子。

final String email = edt.getText().toString().trim();

    //final String emailPattern = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    final String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";



    btnchk.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if (email.matches(emailPattern))
            {
            Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
            }
            else 
            {
            Toast.makeText(getApplicationContext(),"Invalid email address", Toast.LENGTH_SHORT).show();
            }

        }
    });

尝试了这两种模式,但是对于我输入的任何正确的电子邮件 ID,我都收到了无效电子邮件地址的消息。

【问题讨论】:

    标签: java android regex email-validation


    【解决方案1】:

    试试:

        if(isEditTextContainEmail(edtEmailAddress))
        {
          Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
        }
    
        else 
        {
          Toast.makeText(getApplicationContext(),"Invalid email address", Toast.LENGTH_SHORT).show();
        }
    

    使用这种方法:

    public static boolean isEditTextContainEmail(EditText argEditText) {
    
        try {
            Pattern pattern = Pattern.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
            Matcher matcher = pattern.matcher(argEditText.getText());
            return matcher.matches();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个正则表达式:

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

      【讨论】:

        【解决方案3】:

        你的正则表达式很好。您只需在点击侦听器中读取您的电子邮件地址即可

        btnchk.setOnClickListener(new OnClickListener() {
        
            @Override
            public void onClick(View arg0) {
                String email = edt.getText().toString().trim();
                if (email.matches(emailPattern))
                {
        

        问题是您正在阅读您的 edt 文本框 empty,因此 regex 测试失败。

        【讨论】:

          【解决方案4】:

          我认为这是检查电子邮件验证的更好解决方案,试试这个..

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

          我希望为你的案子工作:)

          【讨论】:

            【解决方案5】:

            我认为@Ravi 已经发现了您的问题的直接原因。您没有验证正确的字符串。

            但是,您的正则表达式也是错误的,因为它排除了许多实际上有效的电子邮件地址。例如:

            • 本地部分可以是带引号的字符串
            • 本地部分可以包含各种非字母数字字符
            • 域部分可以有一个组件,也可以有两个以上的组件
            • 域部分可以是IP地址,
            • 本地和域部分可以包含非 ASCII 字符。

            参考:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-06-02
              • 2012-12-31
              • 2018-04-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多