cari

Rumah  >  Soal Jawab  >  teks badan

Perbezaan dalam tingkah laku ungkapan biasa

Saya cuba membina regex untuk memadankan medan yang sepatutnya mengandungi 9 digit

Saya menggunakan ungkapan biasa berikut

/^\d{9,9}$/

Sekarang, masalahnya ialah apabila melakukannya

/^\d{9,9}$/.test("123456789") //returns true

Namun, apabila saya cuba menggunakan padanan Yup menggunakan ungkapan biasa yang sama (lulus dalam myRegex di bawah)

'myField': yup
            .string()
            .nullable()
            .required('Field is required')
            .max(9, `Max length 9`)
            .matches(myRegex, {
                message: 'Field is invalid',
            }),

Untuk input yang sama saya mendapat mesej tidak sah iaitu 123456789

Hanya tertanya-tanya mengapa ini berlaku?

Kemas kini: Ya, gunakan value.search(regex) , jadi dalam kes saya ia menjalankan "123456789".search(/^d{9,9}$/)

Tidak pasti sama ada perkara di atas adalah masalahnya?

P粉996763314P粉996763314313 hari yang lalu444

membalas semua(1)saya akan balas

  • P粉362071992

    P粉3620719922024-04-02 09:57:58

    Nampaknya penyelesaian anda menggunakan ungkapan biasa yang salah

    Masalah timbul apabila kaedah carian() Yup digunakan dengan ungkapan biasa. Kaedah search() mengembalikan indeks padanan pertama dan tidak mengira rentetan lengkap.

    Memandangkan "123456789" mengandungi 9 digit berturut-turut, ia memenuhi ungkapan biasa dan kaedah search() mengembalikan indeks kejadian pertama, iaitu 0. Memandangkan 0 ialah nilai sebenar, Yup mentafsirkannya sebagai padanan yang gagal dan mengembalikan mesej yang tidak sah.

    Ini adalah ungkapan biasa yang anda boleh cuba gunakan /^d{9}$/

    balas
    0
  • Batalbalas