javascript - 寫了一個驗證12.5-20.5的正規老是報錯?
typecho
typecho 2017-06-26 10:57:35
0
3
936

要求的資料格式為:
1
10
100
1-5
10-50
100-500
0.5
10.5
10.5-20
10.5-20.5
10-20.5

也就是要求驗證的數字大小不限,可以有浮點數可以沒有,可以有「-」可以沒有,保留一位小數

這是我寫的正規表示式:

下面的複製錯了:

var a=/^\d{1,}\.?\d?-?(\d{1,})?\.?\d?$/;

更正為:

var a=/^\d{1,}\.?\d{1}?-?(\d{1,})?\.?\d{1}?$/;

但20.5555一直為true是咋回事?

typecho
typecho

Following the voice in heart.

全部回覆(3)
洪涛

/^d{1,}.?d?-?(d{1,})?.?d?$/配對過程如下:
首先d{1,}配對的是"20";
.?匹配".";
d?匹配"5",?匹配了1次;
-?匹配"",因為?0或1次,在這裡匹配00 0次;
(d{1,})?匹配"555",此時?匹配1次;
.?d?匹配"",此時兩個?都匹配0次;
$符合字串結尾,所以"20.5555"可以匹配。

Update1:
/^d{1,}.?d{1}?-?(d{1,})?.?d{1}?$/的配對過程如下:

  1. d{1,}匹配"20";

  2. .?匹配".";

  3. d{1}?會先嘗試配對一個數字,此時符合"5",?符合1次;

  4. -?會配對"",此時?配對0次;

  5. (d{1,})?匹配"555";

  6. .?配對"",此時?配對0次;

  7. d{1}?匹配"",?匹配0次;
    d{1}表示數字重複一次,所以該正則和d其實是一樣的,所以更新後的正則表達式和原先的正規表示式沒有差別。

註:一開始寫的配對過程有點兒問題,現在已經更新。

小葫芦

???為啥要用正規

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板