java 验证邮箱格式怎么实现

Python024

java 验证邮箱格式怎么实现,第1张

public class Test{

public static void main(String[] args){

Test t = new Test()

String email = "[email protected]"

boolean isEmail = t.isEmail(email)

if(isEmail){

System.out.println(email +" is a right email!!!")

}else{

System.out.println("error")

}

}

public boolean isEmail(String email){

//正则表达式

/*

String regex = "^[A-Za-z]{1,40}@[A-Za-z0-9]{1,40}\\.[A-Za-z]{2,3}$"

return email.matches(regex)

*/

//不适用正则

if(email==null||"".equals(email)) return false

if(!containsOneWord('@',email)||!containsOneWord('.',email)) return false

String prefix = email.substring(0,email.indexOf("@"))

String middle = email.substring(email.indexOf("@")+1,email.indexOf("."))

String subfix = email.substring(email.indexOf(".")+1)

System.out.println("prefix="+prefix +" middle="+middle+" subfix="+subfix)

if(prefix==null||prefix.length()>40||prefix.length()==0) return false

if(!isAllWords(prefix)) return false

if(middle==null||middle.length()>40||middle.length()==0) return false

if(!isAllWordsAndNo(middle)) return false

if(subfix==null||subfix.length()>3||subfix.length()<2) return false

if(!isAllWords(subfix)) return false

return true

}

//判断字符串只包含指定的一个字符c

private boolean containsOneWord(char c , String word){

char[] array = word.toCharArray()

int count = 0

for(Character ch : array){

if(c == ch) {

count++

}

}

return count==1

}

//检查一个字符串是否全部是字母

private boolean isAllWords(String prefix){

char[] array = prefix.toCharArray()

for(Character ch : array){

if(ch<'A' || ch>'z' || (ch<'a' &&ch>'Z')) return false

}

return true

}

//检查一个字符串是否包含字母和数字

private boolean isAllWordsAndNo(String middle){

char[] array = middle.toCharArray()

for(Character ch : array){

if(ch<'0' || ch >'z') return false

else if(ch >'9' &&ch <'A') return false

else if(ch >'Z' &&ch <'a') return false

}

return true

}

}

自己写逻辑验证的方式可以做到。我写了下面的:

public static boolean validateEmail(String email) {

boolean flag = false

int pos = email.indexOf("@")

if (pos == -1 || pos == 0 || pos == email.length() - 1) {

return false

}

String[] strings = email.split("@")

if (strings.length != 2) {// 如果邮箱不是xxx@xxx格式

return false

}

CharSequence cs = strings[0]

for (int i = 0i <cs.length()i++) {

char c = cs.charAt(i)

if (!Character.isLetter(c) &&!Character.isDigit(c)) {

return false

}

}

pos = strings[1].indexOf(".")// 如果@后面没有.,则是错误的邮箱。

if (pos == -1 || pos == 0 || pos == email.length() - 1) {

return false

}

strings = strings[1].split(".")

for (int j = 0j <strings.lengthj++) {

cs = strings[j]

if (cs.length() == 0) {

return false

}

for (int i = 0i <cs.length()i++) {//如果保护不规则的字符,表示错误

char c = cs.charAt(i)

if (!Character.isLetter(c) &&!Character.isDigit(c)) {

return false

}

}

}

return true

}

这个效率也不会差很多,不过我推荐matches方法,经过测试的,matches匹配方式运行10000次的时间比上面的时间少了20毫秒。