1. 程式人生 > >正則 密碼 由數字和字母組成, 並且不能為純字母或純數字

正則 密碼 由數字和字母組成, 並且不能為純字母或純數字

密碼由6位以上的字母和數字組成, 至少包含一個字母和數字, 不能由純數字或字母組成。並且不能為純數字, 不能為純字母, 必須包含一個字母和數字。

正則:

1 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,}$
分開來註釋一下:
^ 匹配一行的開頭位置
(?![0-9]+$) 預測該位置後面不全是數字
(?![a-zA-Z]+$) 預測該位置後面不全是字母
[0-9A-Za-z] {6,10} 由6-10位數字或這字母組成
$ 匹配行結尾位置

測試程式碼:

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
		/**
		 * 正則匹配: 由字母和數字組成,但不能為純數字, 不能為純字母。
		 * 
		 * 密碼由6位以上的字母和數字組成, 至少包含一個字母和數字, 不能由純數字或字母組成。
		 * 密碼驗證:"^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,}$" 
		 * 
		 */
		Pattern pattern = Pattern.compile("^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+$");
		String[] test = new String[]{
				"0123", "0a", "012aBc", "Abc0123", "ab0123C", "012abc3", "0a1b2c3d", // 匹配資料
				"", "abc", "012?&^", "abc&(", "&(*.", "www123   ", "www 123" // 違規資料
				};
		
		for(String t : test){
			System.out.println(String.format("%s \t match %b", t, pattern.matcher(t).find()));
		}
		
	}

輸出結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 0123match false 0amatch true 012aBcmatch true Abc0123      match true ab0123C      match true 012abc3match true 0a1b2c3dmatch true match false abc      match false 012?&^match false abc&(match false &(*.match false www123        
match false www123match false

轉自:http://bbs.csdn.net/topics/390681908