ホームページ  >  に質問  >  本文

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

つまり、検証に必要な数値のサイズに制限はありません。浮動小数点数を含むかどうか、「-」を含むかどうか、および小数点以下 1 桁が保持されます。

これは私が書いた正規表現です:

次のコピーは間違っています:

リーリー

次のように修正されました:

リーリー

しかし、なぜ 20.5555 は常に true なのでしょうか?

typechotypecho2644日前881

全員に返信(3)返信します

  • PHP中文网

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

    /^d{1,}.?d?-?(d{1,})?.?d?$/匹配过程如下:
    首先d{1,}匹配的是"20";
    .?匹配".";
    d?匹配"5",?匹配了1次;
    -?匹配"",因为?匹配0或者1次,在这里匹配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. 「555」と一致します;

      (d{1,})?

    6. は "" に一致しますが、この時点では ? は 0 回一致します。

      .?匹配"",此时?d{1}? は「」に一致し、? は 0 回一致します。

      d{1} は数値が 1 回繰り返されることを意味します。したがって、この正規表現は実際には d と同じであるため、更新された正規表現と元の正規表現の間に違いはありません。
    7. d{1}?匹配"",?匹配0次;
      d{1}表示数字重复一次,所以该正则和d注:最初に書いたマッチング処理に問題がありましたが、現在は更新されています。

      返事
      0
  • 曾经蜡笔没有小新

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

    リーリー

    返事
    0
  • 高洛峰

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

    ???正規表現を使用する理由

    返事
    0
  • キャンセル返事