验证 EditText 中的电子邮件 [重复]

Posted

技术标签:

【中文标题】验证 EditText 中的电子邮件 [重复]【英文标题】:Validate an email inside an EditText [duplicate] 【发布时间】:2011-11-29 08:45:04 【问题描述】:

我想验证在 EditText 中引入的电子邮件以及我已经拥有的代码:

最终的 EditText textMessage = (EditText)findViewById(R.id.textMessage);

最终 TextView 文本 = (TextView)findViewById(R.id.text);

    textMessage.addTextChangedListener(new TextWatcher()  
        public void afterTextChanged(Editable s)  
            if (textMessage.getText().toString().matches("[a-zA-Z0-9._-]+@[a-z]+.[a-z]+") && s.length() > 0)
            
                text.setText("valid email");
            
            else
            
                text.setText("invalid email");
            
         
        public void beforeTextChanged(CharSequence s, int start, int count, int after)  
        public void onTextChanged(CharSequence s, int start, int before, int count)  
    ); 

问题是当我在“@”后面引入3个字符时,会出现“有效电子邮件”的消息,而当我引入完整的电子邮件时必须出现。

有什么建议吗?

谢谢大家!

【问题讨论】:

我还建议添加一个“+”作为有效字符,因为可能有这样的电子邮件地址:my+email@somemail.com。 感谢您的建议。添加到我的代码中;) 太好了 :) 我通常不喜欢网站不接受有效的电子邮件字符。 请参考这个:***.com/questions/12947620/… 【参考方案1】:

只需将您的正则表达式更改如下:

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

因为 . (dot) 表示匹配任何单字符。在您的点之前添加一个双反斜杠以代表一个真正的点。

【讨论】:

就是这样,你必须摆脱点 效果很好!非常感谢! 那不是要验证a@foo....com,但不能验证a@foo.co.uka@foo9.com 为我工作谢谢:)【参考方案2】:

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

目前,就我而言,本机支持(通过 xml 属性)验证方法是:

    正则表达式:用于自定义正则表达式 数字:仅用于数字字段 alpha:仅用于 alpha 字段 alphaNumeric:你猜怎么着? 电子邮件:检查该字段是否为有效的电子邮件 creditCard:使用 Luhn 算法检查该字段是否包含有效的信用卡 电话:检查该字段是否包含有效的电话号码 domainName:检查该字段是否包含有效的域名(始终通过 API 级别 ipAddress:检查该字段是否包含有效的 IP 地址 webUrl:检查该字段是否包含有效的 url(始终通过 API 级别 nocheck:它不检查任何内容。 (默认)

你可以在这里查看:https://github.com/vekexasia/android-form-edittext

希望你喜欢它:)

在我链接的页面中,您还可以找到电子邮件验证的示例。我将在此处复制相关的 sn-p:

<com.andreabaccega.widget.FormEditText
       style="@android:style/Widget.EditText"
       whatever:test="email"
       android:id="@+id/et_email"
       android:layout_
       android:layout_
       android:hint="@string/hint_email"
       android:inputType="textEmailAddress"
       />  

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

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

【讨论】:

我去看看!谢谢! :) 三重喜欢..!!干得好伙计。恭喜..! :) 谢谢 ;) 真的很感激 您是否使用过任何特定的 jar 文件,因为当我复制上述代码时,我在第一行出现错误,所以询问@AndreaBaccega【参考方案3】:
public boolean validateEmail(String email) 

Pattern pattern;
Matcher matcher;
String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]2,)$";
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return matcher.matches();


【讨论】:

它对我有用。谢谢【参考方案4】:

如果您使用 API 8 或更高版本,则可以使用现成的 Patterns 类来验证电子邮件。示例代码:

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

如果您甚至支持低于 8 的 API 级别,那么您可以简单地将 Patterns.java 文件复制到您的项目中并引用它。您可以从this link获取Patterns.java的源代码

【讨论】:

【参考方案5】:

这里有几个不错的选择,包括 API 8+ 的 android.util.Patterns.EMAIL_ADDRESS。

https://***.com/a/7882950/1011746

【讨论】:

【参考方案6】:

不要在代码中这样做。可以使用 EditText 的 inputType 属性。

    <EditText 
        android:id="@+id/edit_text"
        android:layout_
        android:layout_
        android:inputType="textEmailAddress"/>

【讨论】:

但我想使用它,因为如果用户介绍了一些不是电子邮件的东西,例如:example.com,他将无法点击按钮来注册自己。您发布的示例代码仅适用于键盘。感谢您的快速回复,但这不是我想要的。【参考方案7】:

试试这个模式.....

editText.addTextChangedListener(new TextWatcher()

        @Override
        public void afterTextChanged(Editable s) 
            pattern = Pattern.compile(".+@.+\\.[a-z]+");
            matcher = pattern.matcher(editText.getText().toString());

            if(matcher.matches()) 
                Log.i("Test","--------Valid Email--------");
            else 

                Log.i("Test","--------Invalid Email------");
            
        

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) 

        

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

         
    ); 

【讨论】:

谢谢你的回复,不过石远海的回复更容易实现,完美运行。【参考方案8】:
private boolean validateEmailAddress(CharSequence emailAddress)


  if( Build.VERSION.SDK_INT >= 8 )
  
    return android.util.Patterns.EMAIL_ADDRESS.matcher(emailAddress).matches();
  

  Pattern pattern;
  Matcher matcher;
  String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]2,)$";
  pattern = Pattern.compile(EMAIL_PATTERN);
  matcher = pattern.matcher(emailAddress);

  return matcher.matches();

【讨论】:

【参考方案9】:

// 验证您的电子邮件地址格式。前abci@gmail.com

public boolean emailValidator(String email) 

    Pattern pattern;
    Matcher matcher;
    final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]2,)$";
    pattern = Pattern.compile(EMAIL_PATTERN);
    matcher = pattern.matcher(email);
    return matcher.matches();

【讨论】:

以上是关于验证 EditText 中的电子邮件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

验证在 EditText 中输入的电子邮件 ID 的模式 [重复]

如何将电子邮件发送到存储在EditText中的地址? [重复]

EditText 上的 Android 电子邮件验证

如何在注册用户之前验证来自 EditText 的电子邮件和密码输入

编辑电子邮件的文本字段不验证电子邮件地址?

java中的电子邮件验证[重复]