一、前提
整數和小數,保留兩位小數的正則表達式:
具體什么意思呢
^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$
二、知識點
1、首先從寫法上可以看出,使用了顯式定義正則表達式的語法,因為其中存在對字符串"\"(反斜杠)
的轉義
2、正則表達式的定義共有2
種方式:顯示定義
和隱式定義
1 /*\d是正則表達式中的元字符,用於匹配數字,相當於[0-9],所以[0-9]也可以寫成\d*/
2 var myregex = new RegExp("[0-9]"); //顯式定義
3 var myregex = /[0-9]/; //隱式定義
3、何謂定位符?即限定某些字符出現的位置。
說明:^表示必須以什么字符開頭;$表示必須以什么字符結尾。
4、何謂限定符?即限定某個字符或某類字符出現的次數。
說明:
* 表示重復0次或更多次(任意次數);
?表示重復0次或1次(最多1次);
{n}表示重復n次;
{n,m}表示重復n-m次;
5、何謂分組?分組又稱為子表達式,即把一個正則表達式的全部或部分分成一個或多個組。
語法:分組使用的字符為“(”和“)”,即左括號和右括號。每一個子表達式都可以當做一個整體來處理。
三、拆分
1 //第一步:先分組,不管定位符和限定符。總共可分為兩大組。
2 (([1-9]{1}\d*)|([0]{1}))//第一大組:整數部分
3 (\.(\d){0,2})//第二大組:小數部分
四、分析第一大組
1 //第二步:繼續分組,將第一大組(整數部分)繼續拆分,可分為3部分。
2 ([1-9]{1}\d*)//第一部分
3 | //第二部分
4 ([0]{1})//第三部分
1、[...]
是正則表達式中的元字符
。它會匹配方括號中的所有字符。
2、|
是正則表達式中的選擇符
。簡單來說就是:用於二選一
。即選擇2個選項之中的任意一個,選他或選她。
3、整數部分的兩種情況:首位是0
和首位不是0
。即0.12
、13.14
、5.21
4、第一部分中的內容,即第一種情況,首位不為0:([1-9]{1}\d*)
可以看出,第一部分由兩個模塊組成,即[1-9]{1}和\d*。
(1)[1-9]{1}表示1-9之間的數字只出現一次,即保證了該數的首位不是0,總之是大於0的數。
(2)\d*表示0-9之間的數字可以出現任意次,即0次或更多次。出現0次說明是一位整數。出現更多次就是多位整數。
5、第三部分中的內容,即第二種情況,首位為0
:([0]{1})
【一個字符沒必要使用[
元字符,直接寫0
就行,即(0{1})
】
表示數字0
只能出現一次,即首位只能是0
,而且只能有一個0
。
第一大組匹配了整數部分的情況,大於0的數還是小於1的數
五、分析第二大組
1 (\.(\d){0,2})//第二大組:小數部分 2 //第三步:繼續分組,將第二大組(小數部分)繼續拆分,可分為3部分。
3 \. //第一部分
4 (\d) //第二部分
5 {0,2} //第三部分
1、.(點)
是正則表達式中的元字符
。它會匹配除了換行符以外的任意字符
。
2、由於.(點)
是元字符,所以,如果想要匹配字面意義上的點時(此處需要匹配小數點),需要使用轉義字符\(反斜杠)
將它進行轉義,即\.
。
3、如果要匹配小數點后保留2
位小數,則只需要改一下限定符即可。\.\d{2}
六、總結
^(([1-9]{1}\d*)|(0{1}))(\.\d{0,2})?$就表示了小數點后可以保留0位、1位、或2位小數。
要求小數點后只能保留2位小數,則修改表示小數點后面數字的重復次數(即位數)的限定符{},直接將{0,2}改為{2},
然后去掉限定符?即可。去掉了 ? 就代表該數不可能是整數,一定是小數。
最終的正則表達式:^(([1-9]{1}\d*)|(0{1}))(\.\d{2})$