先来句废话,
因为地震,很久没有来csdn了,现在平静了 终于可以安心下来继续我的学习和工作
正因为地震期间,没有事情做 就无聊的琢磨着E-mail,网上看了很多关于验证E-mail的,但总觉得在一些验证方面方法有点不妥,某日阅正则表达式,突发感概....试着用正则表达式验证E-mail格式是否正确
下面是我自己写的源代码,其代码也许不是很好,如果你觉得有问题,君可以贴出来 大家共同交流^_^
import java.util.regex.Pattern;
/**
* <p>
* 此类是根据RFC 2822 检查Email格式是否正确
* </p>
* <p>
* RFC2822 下载址:<a href="http://www.faqs.org/rfcs/rfc2822.html">http://www.faqs.org/rfcs/rfc2822.html</a>
* </p>
* <p>
* 其中规定: <br/>
* 1.区别字符记号@ Mail 本文中,“@” 的前后地址使用的字符为许可使用的1个或者多个。<br/>
* 2.E-Mail
* 地址可以使用以下82 个字符:<br/> ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
* 0123456789<br/> !#$%&'*+-./=?^_{|}~ 3.“@”在外的93个ASCII 字符中,禁止使用以下 11 个字符:"(),:;<>[/]<br/>
4.包括“@”最多可以识别64 个字符。 超过64个字节以外的任何允许使用的字符都不能被识别作为E-mail
* 地址。<br/>
* * @author Mothz
*
*/
public class CheckMail {
/** Email正则表达式禁用字符 */
private static final String PATTERN_EMAIL_CODE = "[^///"(),:;<>//[//]]";
/**
* 判断Email格式是否正确
*
* @param 判断的Email
* @return
*/
public static boolean isEmail(String str) {
//System.out.println(PATTERN_EMAIL_CODE);
//判断E-mail的总长度是否超过64
if (str.length() > 64)
return false;
//检查是否有@符号
int findex = str.indexOf("@");
if (findex == -1)
return false;
//检查是否有多个 @ 符号
if (findex != str.lastIndexOf("@"))
return false;
//检查 @ 符号之前的字符
String tmp = str.substring(0, findex);
//System.out.println(tmp);
if (!emailUseCode(tmp))
return false;
//检查 @ 符号之后的字符
tmp = str.substring(findex + 1, str.length());
System.out.println(tmp);
return emailPostfix(tmp);
}
/**
* 判断字符是否是Email使用的字符(除@符号)
*
* @param Email(除@符号)
* @return
*/
private static boolean emailUseCode(String str) {
return Pattern.matches(PATTERN_EMAIL_CODE + "{" + str.length() + "}", str);
}
/**
* 检查Email后缀格式
*
* @param 后缀字符串
* @return
*/
private static boolean emailPostfix(String str) {
// 判断是否使用规定字符
if (!emailUseCode(str))
return false;
// 获取第一次出现"."位置,
int findex = str.indexOf(".");
// 判断"."是否存在和是否在第1位置。排除这类Email: ABC@.com或ABC@com
if (findex == -1 || findex == 0)
return false;
// 判断最后一次出现"."位置是否在字符串末尾,排除这类Email: ABC@com.
if (str.lastIndexOf(".") == str.length() - 1)
return false;
// 转换为char数组
char[] tmp = str.toCharArray();
// 判断是否出现有两个"."连续出现,排除这类Email: ABC@abc..com 或 ABC@abc...com
for (int i = 0; i < tmp.length - 1; i++) {
if (tmp[i] == tmp[i + 1])
return false;
}
return true;
}
}