Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Ich erhalte immer eine Fehlermeldung, wenn ich einen regulären Ausdruck schreibe, um 12.5-20.5 zu überprüfen?

Das erforderliche Datenformat ist:
1
10
100
1-5
10-50
100-500
0,5
10,5
10,5-20
10,5-20,5
10-20,5

Das heißt, die Größe der für die Verifizierung erforderlichen Zahl ist nicht begrenzt, sie kann Gleitkommazahlen haben oder nicht, sie kann „-“ haben oder nicht, und eine Dezimalstelle bleibt erhalten

Dies ist der reguläre Ausdruck, den ich geschrieben habe:

Die folgende Kopie ist falsch:

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

Korrigiert zu:

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

Aber warum ist 20,5555 immer wahr?

typechotypecho2694 Tage vor919

Antworte allen(3)Ich werde antworten

  • 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. (\d{1,})?匹配"555";

    6. \.?匹配"",此时?匹配0次;

    7. \d{1}?匹配"",?匹配0次;
      \d{1}表示数字重复一次,所以该正则和\d其实是一样的,所以更新后的正则表达式和原先的正则表达式没有区别。

    注:一开始写的匹配过程有点儿问题,现在已经更新。

    Antwort
    0
  • 曾经蜡笔没有小新

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

    const regex = /^\d+(?:\.\d)?(?:-\d+(?:\.\d)?)?$/;
    
    const cases = [
        "1",
        "10",
        "100",
        "1-5",
        "10-50",
        "100-500",
        "0.5",
        "10.5",
        "10.5-20",
        "10.5-20.5",
        "10-20.5",
        "20.5555",
        "20.5-20.5555"
    ];
    
    const r = cases.map(s => regex.test(s));
    console.log(r);

    Antwort
    0
  • 高洛峰

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

    ???为啥要用正则

    Antwort
    0
  • StornierenAntwort