Rumah  >  Soal Jawab  >  teks badan

javascript - Saya sentiasa mendapat ralat apabila saya menulis regex untuk mengesahkan 12.5-20.5?

Format data yang diperlukan ialah:
1
10
100
1-5
10-50
100-500
0.5
10.5
10.5-20
10.5-20.5.0.5
Iaitu, saiz nombor yang diperlukan untuk pengesahan tidak terhad, ia boleh mempunyai nombor titik terapung atau tidak, ia boleh mempunyai "-" atau tidak, dan satu tempat perpuluhan dikekalkan

Ini adalah ungkapan biasa yang saya tulis:

Salinan berikut adalah salah:

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

Dibetulkan kepada:

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

Tetapi kenapa 20.5555 sentiasa benar?

typechotypecho2644 hari yang lalu882

membalas semua(3)saya akan balas

  • 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次;
    $ Padan dengan hujung rentetan, jadi "20.5555" boleh sepadan.

    Kemas kini1: Proses pemadanan
    /^d{1,}.?d{1}?-?(d{1,})?.?d{1}?$/ adalah seperti berikut:

    1. d{1,} sepadan dengan "20";

    2. .? sepadan dengan ".";

    3. d{1}?会首先尝试匹配一个数字,此时匹配"5",?Dipadankan 1 kali;

    4. -?会匹配"",此时?Dipadankan 0 kali;

    5. sepadan dengan "555";

      (d{1,})?

    6. sepadan dengan "", pada masa ini ? sepadan dengan 0 kali

      .?匹配"",此时?

    7. d{1}? sepadan dengan "", ? sepadan dengan 0 kali;
    8. d{1} bermaksud nombor itu diulang sekali, jadi biasa ini Ia sebenarnya sama dengan d, jadi tiada perbezaan antara ungkapan biasa yang dikemas kini dan ungkapan biasa asal.

      d{1}?匹配"",?匹配0次;
      d{1}表示数字重复一次,所以该正则和d

    9. Nota: Terdapat masalah dengan proses pemadanan yang saya tulis pada mulanya, tetapi ia telah dikemas kini sekarang.

    balas
    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);

    balas
    0
  • 高洛峰

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

    ???Kenapa guna ungkapan biasa

    balas
    0
  • Batalbalas