在程序設計過程中,經常需要對輸入的數據格式進行檢查,這時就會用到正則表達式,匹配正則表達式則數據格式正確,否則格式錯誤。為了檢查輸入的數據是否滿足某種格式,可以使用String類的matches()方法進行判斷,語法格式如下:
1
|
boolean matches(String regex) |
regex:指定的正則表達式。
返回值:返回boolean類型。
該方法用于告知當前字符串是否匹配參數regex指定的正則表達式,返回值是boolean類型,如果當前字符串與正則表達式匹配,則該方法返回true,否則返回false。
正則表達式是由一些含有特殊意義的字符組成的字符串,這些含有特殊意義的字符稱為元字符,下面列出了正則表達式的部分元字符,在正則表達式的寫法中,要在下列元字符的前面添加“\”符號進行轉譯,例如元字符“\d”在正則表達式的寫法中是“\d”,但是對于“.”,轉譯后就不代表任意一個字符啦,而是表示一個具體的句點。
.:代表任意一個字符。
\d:代表0~9的任何一個數字。
\D:代表任何一個非數字字符。
\s:代表空白字符。
\S:代表非空白字符。
\w:代表可用作標識符的字符,但不包括“$”。
\W:代表不可用作標識符的字符。
\p{Lower}:代表小寫字母a~z。
\p{Upper}:代表大寫字母A~A。
\p{ASCII}:ASCII字符。
\p{Alpha}:字母字符。
\p{Digit}:十進制數字,0~9。
\p{Alnum}:數字或字母字符。
\p{Punct}:標點符號。
\p{Graph}:可見字符。
\p{Print}:可打印字符。
\p{Blank}:空白或制表符。
\p{Cntrl}:控制字符。
在使用 正則表達式時,如果需要某一類型的元字符多次輸出,逐個輸入就相當麻煩,這時就可以使用正則表達式的限定字符來重復次數,下面列出了常用限定符及其含義。
?:0次或1次。
*:0次或多次。
+:0次或1次。
{n}:重復n次。
{n,}:至少重復n次。
{n,m}:重復n~m次。
在正則表達式中還可以用方括號把多個字符括起來,方括號中各種正則表達式代表不同的含義,下面列出了方括號中元字符及其含義。
[abc]:表示a、b或者c。
[^abc]:表示a、b和c之外的任何字符。
[a-zA-Z]:a~z或A~Z的任何字符。
[a-d[m-p]]:a~d或m~p的任何字符。
[a-z&&[def]]:d、e或者f。
[a-z&&[^bc]]:a~z之間不含b和c的所有字符。
[a-z&&[^m-p]]:a~z之間不含m~p的所有字符。
用法示例:
1、車牌號:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/** * * @description:驗證車牌號 * @param carNum * 豫A106EK * @return 合法:true 不合法:false */ public static boolean validateCarNum(String carNum) { boolean result = false ; String[] provence = new String[] { "京" , "津" , "冀" , "晉" , "遼" , "吉" , "黑" , "滬" , "蘇" , "浙" , "皖" , "閩" , "贛" , "魯" , "豫" , "鄂" , "湘" , "粵" , "桂" , "瓊" , "渝" , "川" , "黔" , "滇" , "藏" , "陜" , "甘" , "青" , "寧" , "新" , "港" , "澳" , "蒙" }; String reg = "[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}" ; boolean firstChar = false ; if (carNum.length() > 0 ) { firstChar = Arrays.asList(provence).contains(carNum.substring( 0 , 1 )); } try { Pattern p = Pattern.compile(reg); Matcher m = p.matcher(carNum); if (m.matches() && firstChar) { result = true ; } else { result = false ; } } catch (Exception e) { e.printStackTrace(); } return result; } |
2、手機號碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/** * * @description:驗證手機號碼 * @param mobileNum 15516985859 * @return 合法:true 不合法:false */ public static boolean isMobileNum(String mobileNum) { boolean result = false ; try { Pattern p = Pattern.compile( "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$" ); Matcher m = p.matcher(mobileNum); result = m.matches(); } catch (Exception e) { e.printStackTrace(); } return result; } |
手機號+固定電話:010-1111111,15516985859,0377-1111111
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//java檢測是否為電話號碼(手機、固定電話驗證) String legalPhone = "" ; String regExp = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}|[0]{1}[0-9]{2,3}-[0-9]{7,8}$" ; Pattern p = Pattern.compile(regExp); Matcher m = p.matcher(importPotentialBFOs[i].getLegalPhone()); if (m.find()){ //注意:m.find只能用一次,第二次調用后都為false legalPhone = importPotentialBFOs[i].getLegalPhone(); uploadTmp.setLegalTelephone(legalPhone); } else { throw new BizException( "聯系電話格式錯誤!" ); } |
3.實數:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
String[] arrs= new String[]{ "a" , "1.123" , "-1.23" , "0" , "+111" }; String regex= "-?\\d+\\.?\\d*" ; Pattern p = Pattern.compile(regex); for ( int i = 0 ; i < arrs.length; i++) { Matcher m = p.matcher(arrs[i]); System.out.println(arrs[i]+ ":" +m.matches()); } |
打印:
a:false
1.123:true
-1.23:true
0:true
+111:false