首頁  >  問答  >  主體

javascript - 寫了一個驗證12.5-20.5的正規老是報錯?

要求的資料格式為:
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是咋回事?

typechotypecho2694 天前920

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-06-26 10:59:35

    /^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其實是一樣的,所以更新後的正則表達式和原先的正規表示式沒有差別。

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

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-26 10:59:35

    雷雷

    回覆
    0
  • 高洛峰

    高洛峰2017-06-26 10:59:35

    ???為啥要用正規

    回覆
    0
  • 取消回覆