1. 程式人生 > >小數點後保留2位小數的正則表達式

小數點後保留2位小數的正則表達式

如果 知識 兩位小數 位數 3.1 斜杠 字符串 第一步 {}

一、前提

  整數和小數,保留兩位小數的正則表達式:

  具體什麽意思呢 

 ^(([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.1213.145.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})$

小數點後保留2位小數的正則表達式