java 正则表达式

1. 邮箱(着重尾部格式)

public static final String EMAIL = "^[A-Za-z0-9][\\w\\-\\.]{1,60}@([\\w\\\\-]+\\.)+(info|biz|com|edu|gov|net|am|bz|cn|cx|hk|jp|tw|vc|vn)$";

 public static void main(String[] args) {
   regexEmail("11@qq.aom");
   regexEmail("11@qq.abc");
   regexEmail("11@qq.ddd");
   regexEmail("11@qq.am");
   regexEmail("11@qq.biz");
   regexEmail("11@qq.com");
 }
 
 public static void regexEmail(String email){
    //String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
    Pattern regex = Pattern.compile(EMAIL);
      Matcher matcher = regex.matcher(email);
      boolean flag = matcher.matches();
      System.out.println(email+" flag="+flag);
 }
2. 密码必须由字母和数字组成
一个用户注册功能的密码有如下要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。
如何分析需求?拆分!这就是软件设计的一般思路了。于是乎,拆分需求如下:

1,不能全部是数字
2,不能全部是字母
3,必须是数字或字母
只要能同时满足上面3个要求就可以了,写出来如下:

^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$
分开来注释一下:
^ 匹配一行的开头位置
(?![0-9]+$) 预测该位置后面不全是数字
(?![a-zA-Z]+$) 预测该位置后面不全是字母
[0-9A-Za-z] {8,16} 由8-16位数字或这字母组成
$ 匹配行结尾位置
注:(?!xxxx) 是正则表达式的负向零宽断言一种形式,标识预该位置后不是xxxx字符。

测试用例如下:

public class Test {
 public static void main(String[] args) throws Exception {
   String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";		

   String value = "aaa";  // 长度不够
   System.out.println(value.matches(regex));

   value = "1111aaaa1111aaaaa";  // 太长
   System.out.println(value.matches(regex));

   value = "111111111"; // 纯数字
   System.out.println(value.matches(regex));

   value = "aaaaaaaaa"; // 纯字母
   System.out.println(value.matches(regex));

   value = "####@@@@#"; // 特殊字符
   System.out.println(value.matches(regex));

   value = "1111aaaa";  // 数字字母组合
   System.out.println(value.matches(regex));

   value = "aaaa1111"; // 数字字母组合
   System.out.println(value.matches(regex));

   value = "aa1111aa";	// 数字字母组合
   System.out.println(value.matches(regex));

   value = "11aaaa11";	// 数字字母组合
   System.out.println(value.matches(regex));

   value = "aa11aa11"; // 数字字母组合
   System.out.println(value.matches(regex));
 }
}
采用普通方式:(只能由字母数字下划线和$)
public static void main(String[] args) throws Exception {
   Scanner scan=new Scanner(System.in);
   String str=scan.nextLine();
   char[] ch = str.toCharArray();
   boolean ok=true;
   for(int i=0;i<str.length();i++){
     if(!Character.isLetter(ch[i])&&!Character.isDigit(ch[i])&&!Character.toString(ch[i]).equals("_")&&!Character.toString(ch[i]).equals("$")){		
       ok=false;
     }
   }
   if(ok){
     System.out.print("符合");
   }else{
     System.out.print("不符合");
   }
 }
采用普通方式:(必须有字母数字和(下划线或$))
public class test1 {

   public static void main(String[] args) throws Exception {
       Scanner scan=new Scanner(System.in);
       String str=scan.nextLine();
       char[] ch = str.toCharArray();
       if(containNum(ch)&&containLetter(ch)&&(str.contains("_")||str.contains("$"))){
           System.out.print("符合");
       }else{
           System.out.print("不符合");
       }
   }

   public static boolean containNum(char ch[]){
       boolean contain=false;
       for(int i=0;i<ch.length;i++){
           if(Character.isDigit(ch[i])){
               contain=true;
           }
        }
       return contain;
   }

   public static boolean containLetter(char ch[]){
       boolean contain=false;
       for(int i=0;i<ch.length;i++){
           if(Character.isLetter(ch[i])){
               contain=true;
           }
       }
       return contain;
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值