A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunalong 中级黑马   /  2013-7-16 10:11  /  1221 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-17 21:15 编辑

怎么用java正则表达式实现对E-mail地址正确性的验证?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

3 个回复

倒序浏览
代码不是很好
import java.util.regex.pattern;

/**

* <p>

* 此类是根据rfc 2822 检查email格式是否正确

* </p>

* <p>

* rfc2822 下载址:<a >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..comabc@abc...com

for (int i = 0; i < tmp.length - 1; i++) {

if (tmp == tmp[i + 1])

return false;

}

return true;

}

}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
  1. 正则表达式用例
  2.   * 1、^\S+[a-z A-Z]$$ 不能为空 不能有空格  只能是英文字母
  3.   * 2、\S{6,}         不能为空 六位以上
  4.   * 3、^\d+$$          不能有空格 不能非数字
  5.   * 4、(.*)(\.jpg|\.bmp)$$ 只能是jpg和bmp格式
  6.   * 5、^\d{4}\-\d{1,2}-\d{1,2}$$ 只能是2004-10-22格式
  7.   * 6、^0$$            至少选一项
  8.   * 7、^0{2,}$$        至少选两项
  9.   * 8、^[\s|\S]{20,}$$ 不能为空 二十字以上
  10.   * 9、^\+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(\.|\-))+[a-z]{2,6}$$邮件
  11.   * 10、\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)* 输入多个地址用逗号或空格分隔邮件
  12.   * 11、^(\([0-9]+\))?[0-9]{7,8}$$电话号码7位或8位或前面有区号例如(022)87341628
  13.   * 12、^[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(\.[a-z A-Z 0-9 _]+)+(\,[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(\.[a-z A-Z 0-9 _]+)+)*$$
  14.   *     只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
  15.   * 13 ^\w+@\w+(\.\w+)+(\,\w+@\w+(\.\w+)+)*$$上面表达式也可以写成这样子,更精练。
  16.     14   ^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$$ [/size]
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
本帖最后由 tonygone 于 2013-7-17 11:26 编辑
  1.     /**
  2.      *
  3.      * 验证正则表达式: ^([a-zA-Z0-9]*[-_\.]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+([\.][a-zA-Z0-9]{2,})+$
  4.      * java 验证邮箱
  5.      * @param email
  6.      * @return
  7.      */
  8.     public static boolean isEMailNO(String email){  
  9.         boolean flag = false;  
  10.         try{  
  11.          Pattern p = Pattern.compile("^([a-zA-Z0-9]*[-_\\.]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+([\\.][a-zA-Z0-9]{2,})+$");
  12.          Matcher m = p.matcher(email);  
  13.          flag = m.matches();  
  14.         }catch(Exception e){  
  15.          flag = false;  
  16.         }  
  17.         return flag;  
  18.        }
  19.    
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马