验证 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.uk
或a@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中的地址? [重复]