Perbezaan dalam tingkah laku ungkapan biasa
P粉996763314
P粉996763314 2024-04-01 13:33:29
0
1
382

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粉996763314
P粉996763314

membalas semua(1)
P粉362071992

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}$/

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan