黑马程序员技术交流社区
标题:
正则表达式的问题
[打印本页]
作者:
sunalong
时间:
2013-7-16 10:11
标题:
正则表达式的问题
本帖最后由 杨兴庭 于 2013-7-17 21:15 编辑
怎么用java正则表达式实现对E-mail地址正确性的验证?
作者:
付龙
时间:
2013-7-16 11:40
代码不是很好
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..com
或
abc@abc...com
for (int i = 0; i < tmp.length - 1; i++) {
if (tmp
== tmp[i + 1])
return false;
}
return true;
}
}
作者:
董凯
时间:
2013-7-16 21:26
正则表达式用例
* 1、^\S+[a-z A-Z]$$ 不能为空 不能有空格 只能是英文字母
* 2、\S{6,} 不能为空 六位以上
* 3、^\d+$$ 不能有空格 不能非数字
* 4、(.*)(\.jpg|\.bmp)$$ 只能是jpg和bmp格式
* 5、^\d{4}\-\d{1,2}-\d{1,2}$$ 只能是2004-10-22格式
* 6、^0$$ 至少选一项
* 7、^0{2,}$$ 至少选两项
* 8、^[\s|\S]{20,}$$ 不能为空 二十字以上
* 9、^\+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(\.|\-))+[a-z]{2,6}$$邮件
* 10、\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)* 输入多个地址用逗号或空格分隔邮件
* 11、^(\([0-9]+\))?[0-9]{7,8}$$电话号码7位或8位或前面有区号例如(022)87341628
* 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 _]+)+)*$$
* 只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
* 13 ^\w+@\w+(\.\w+)+(\,\w+@\w+(\.\w+)+)*$$上面表达式也可以写成这样子,更精练。
14 ^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$$ [/size]
复制代码
作者:
tonygone
时间:
2013-7-17 11:25
本帖最后由 tonygone 于 2013-7-17 11:26 编辑
/**
*
* 验证正则表达式: ^([a-zA-Z0-9]*[-_\.]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+([\.][a-zA-Z0-9]{2,})+$
* java 验证邮箱
* @param email
* @return
*/
public static boolean isEMailNO(String email){
boolean flag = false;
try{
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,})+$");
Matcher m = p.matcher(email);
flag = m.matches();
}catch(Exception e){
flag = false;
}
return flag;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2