浅析一个匹配数字和字母密码的正则表达式

栏目: 编程语言 · 正则表达式 · 发布时间: 6年前

内容简介:最近做项目,遇到这样的需求,要求由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。下面给大家分享实现代码,要求看看吧

一个用户注册功能的密码有如下要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在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));
  }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

奔腾年代

奔腾年代

郭万盛 / 中信出版集团 / 2018-9-1 / 68.00

1994年4月20日,一条64K国际专线将中关村地区教育与科研示范网络与互联网连在了一起。中国,成为第77个全功能接入互联网的国家。 1995年,中国互联网正式开始商业化应用。浪潮开始! 这是一个波澜壮阔的年代,带给我们翻天覆地的变化。中国互联网25年发展史的全景展示、忠实梳理和记录。 在更宏观的角度审视互联网与中国的关系,人们将会发现,互联网革命给中国带来了重新崛起的时代机遇。......一起来看看 《奔腾年代》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码