Java字符串中电子邮件的简单无误验证
我试图找到一个简单的方法来检查用户的输入是否符合电子邮件地址的两个标准。我已经阅读了很多关于这个主题的文章,大多数人似乎也想验证电子邮件地址。我不想建立一些超级复制者电子邮件地址验证/检查程序。我正在尝试建立一种方法来检查以下内容:Java字符串中电子邮件的简单无误验证,java,string,email-validation,Java,String,Email Validation,我试图找到一个简单的方法来检查用户的输入是否符合电子邮件地址的两个标准。我已经阅读了很多关于这个主题的文章,大多数人似乎也想验证电子邮件地址。我不想建立一些超级复制者电子邮件地址验证/检查程序。我正在尝试建立一种方法来检查以下内容: 用户输入的字符串包含“@”符号 “@”符号前至少有两个字符 at符号后有一个“.”,后面只有三个字符。域名的长度可以根据需要而定,但字符串必须以“.\uu\uu”结尾。如“.com”或“.net” 我知道这不是一个包罗万象的电子邮件地址检查器。但那不是我想要的。我只
javax.mail
包仅为此提供了一个类:。使用它可以强制执行RFC822法规遵从性。javax.mail包提供了一个类,仅用于此:。使用它可以强制执行RFC822合规性。不完美,但可以完成工作
static boolean validEmail(String email) {
// editing to make requirements listed
// return email.matches("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}");
return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{3}");
}
void checkEmails() {
for(String email : emailAddresses) {
if(validEmail(email)) {
// it's a good email - do something good with it
}
else {
// it's a bad email - do something... bad to it? sounds dirty...
}
}
}
虽然不完美,但能完成任务
static boolean validEmail(String email) {
// editing to make requirements listed
// return email.matches("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}");
return email.matches("[A-Z0-9._%+-][A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{3}");
}
void checkEmails() {
for(String email : emailAddresses) {
if(validEmail(email)) {
// it's a good email - do something good with it
}
else {
// it's a bad email - do something... bad to it? sounds dirty...
}
}
}
int indexOfAt=email.indexOf('@');
//第一次检查:
如果(indexOfAt<0){
//错误
}
//第二次检查:
if(indexOfAt<2){
//错误
}
//第三张支票:
int indexOfLastDot=email.lastIndexOf('.');
if(indexOfLastDot
阅读字符串方法的文档。int indexOfAt=email.indexOf('@');
//第一次检查:
如果(indexOfAt<0){
//错误
}
//第二次检查:
if(indexOfAt<2){
//错误
}
//第三张支票:
int indexOfLastDot=email.lastIndexOf('.');
if(indexOfLastDot阅读字符串方法的文档。在这种情况下很难说什么是简单的。您发布了一些案例(包含@,在之前/之后包含另一个字符)。我会阅读规范并制作一个完整的正则表达式来验证它。只是一个术语说明:你不想检查电子邮件,你想检查电子邮件地址。这是不一样的。另一个注意事项是:顶级域名有更多(
museum
,aero
)和少于两个(de
,us
)字母。事实上,所有国家代码顶级域名都是字母。(我的大多数电子邮件地址都以.de
结尾)@Paŭlo Ebermann感谢您的更正。我做了必要的修改来澄清原来的问题。在这种情况下很难说什么是简单的。您发布了一些案例(包含@,在之前/之后包含另一个字符)。我会阅读规范并制作一个完整的正则表达式来验证它。只是一个术语说明:你不想检查电子邮件,你想检查电子邮件地址。这是不一样的。另一个注意事项是:顶级域名有更多(museum
,aero
)和少于两个(de
,us
)字母。事实上,所有国家代码顶级域名都是字母。(我的大多数电子邮件地址都以.de
结尾)@Paŭlo Ebermann感谢您的更正。我做了必要的修改来澄清原来的问题。不得不承认我比我更喜欢这个。不得不承认我比我更喜欢这个。也许你也可以加小写?我可以。我可以补充很多东西。这就像将每个A-Z
更改为A-Za-Z
(可能还有一些我不知道的快捷方式可以做得更好)一样简单。但是,OP想要简单,他得到了简单。@glowcoder感谢您的帮助。我试图理解email.matches部分的布尔代码,但对于如何将其合并到我的代码中,我有点困惑。我已经将布尔代码作为一个单独的方法输入到我的代码中。现在我在写“如果”语句。我编辑了原始问题。@glowcoder我的问题是:如果电子邮件有效,则返回email.matches是否返回“true”;如果电子邮件无效,则返回“false”?所以我使用上述代码的方向是正确的?@glowcoder谢谢。与此同时,我阅读了更多的文档,找到了另一种方法。。。同样的结果,只是另一种方式。谢谢你的帮助。也许你也可以加小写?我可以。我可以补充很多东西。这就像将每个A-Z
更改为A-Za-Z
(可能还有一些我不知道的快捷方式可以做得更好)一样简单。但是,OP想要简单,他得到了简单。@glowcoder感谢您的帮助。我试图理解email.matches部分的布尔代码,但对于如何将其合并到我的代码中,我有点困惑。我已经将布尔代码作为一个单独的方法输入到我的代码中。现在我在写“如果”语句。我编辑了原始问题。@glowcoder我的问题是:如果电子邮件有效,则返回email.matches是否返回“true”;如果电子邮件无效,则返回“false”?所以我使用上述代码的方向是正确的?@glowcoder谢谢。与此同时,我阅读了更多的文档,找到了另一种方法。。。同样的结果,只是另一种方式。非常感谢您的帮助。这允许test@foo@bar.com
不符合要求。它也不适用于不允许使用的字符,例如、`
及其同类。这允许test@foo@bar.com
不符合要求。它也不适用于不允许使用的字符,例如、`
及其同类。
int indexOfAt = email.indexOf('@');
// first check :
if (indexOfAt < 0) {
// error
}
// second check :
if (indexOfAt < 2) {
// error
}
// third check :
int indexOfLastDot = email.lastIndexOf('.');
if (indexOfLastDot < indexOfAt || indexOfLastDot != (email.length() - 4)) {
// error
}