Android电子邮件EditText验证[重复]

Posted

技术标签:

【中文标题】Android电子邮件EditText验证[重复]【英文标题】:Android Email EditText Validation [duplicate] 【发布时间】:2012-03-10 11:38:13 【问题描述】:

我有这个 EditText 定义:

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

请注意,EditText 具有使用电子邮件地址规范定义的 inputType。 Android 是否内置了任何东西来验证电子邮件地址输入类型,或者这一切都必须手动完成?它允许我输入无效数据,所以我很好奇它的用途。

谢谢。

【问题讨论】:

请参考这个,希望对你有帮助:***.com/questions/12947620/… 【参考方案1】:

这里通过输入类型电子邮件,您正在设置电子邮件类型的键盘表示“@”和“。”关键字将显示在键盘上。

更好的解决方案是通过以下功能比较电子邮件

public boolean isEmailValid(String email)
    
         String regExpn =
             "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]1|[\\w-]2,))@"
                 +"((([0-1]?[0-9]1,2|25[0-5]|2[0-4][0-9])\\.([0-1]?"
                   +"[0-9]1,2|25[0-5]|2[0-4][0-9])\\."
                   +"([0-1]?[0-9]1,2|25[0-5]|2[0-4][0-9])\\.([0-1]?"
                   +"[0-9]1,2|25[0-5]|2[0-4][0-9]))1|"
                   +"([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]2,4)$";

     CharSequence inputStr = email;

     Pattern pattern = Pattern.compile(regExpn,Pattern.CASE_INSENSITIVE);
     Matcher matcher = pattern.matcher(inputStr);

     if(matcher.matches())
        return true;
     else
        return false;

如果此函数返回 true,则您的电子邮件地址有效,否则无效

【讨论】:

假设该方法可能被多次调用,将模式存储在静态字段中效率更高。此外,由于您的模式使用 [a-zA-Z] 标志 Pattern.CASE_INSENSITIVE 是多余的(或者您可以将 [az] 与它一起使用):private static final String EMAIL_PATTERN = Pattern.compile("&lt;emailpattern&gt;"); 此外,最后一个 if 语句可以简化为:@987654324 @。而且你错过了一些类型声明;) 不是一个糟糕的解决方案,但下面的解决方案更好。 未传递有效的 1@ggg.ccc。最好的选择是下面的答案或使用此模式 String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" // + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]2,)$"; 如果你有butterknife和android Saripaar,它会更容易使用,代码看起来更干净:)【参考方案2】:

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

public final static boolean isValidEmail(CharSequence target) 
    if (target == null) 
        return false;

    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();

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

【讨论】:

这应该是公认的答案 我同意,这是正确的做法。 纯真棒!它就像一个魅力【参考方案3】:

您可以找到更好的答案 here 和 here(感谢原作者)

boolean isEmailValid(CharSequence email) 
   return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();

或 自定义验证库https://github.com/vekexasia/android-form-edittext 查看second link 了解详情和预览(正则表达式、数字、字母、字母数字、电子邮件、信用卡、电话、域名、ipAddress、webUrl)

干杯

【讨论】:

【参考方案4】:

Editext 字段不会仅通过将输入法设置为电子邮件类型来验证您的电子邮件。

您需要自己验证。

Android: are there any good solutions how to validate Editboxes

email validation android

【讨论】:

这是回答问题的唯一答案

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

EditText 上的 Android 电子邮件验证

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

Android,从edittext中获取文本[重复]

Android 电子邮件验证不起作用

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

如何防止滚动到焦点 EditText [重复]