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