搜尋

首頁  >  問答  >  主體

正規表示式行為的差異

我正在嘗試建立一個正規表示式來匹配應包含 9 位數字的欄位

我使用下面的正規表示式

/^\d{9,9}$/

現在,問題是在做的時候

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

但是,當我嘗試使用 Yup 的匹配項使用相同的正規表示式(在下面的 myRegex 中傳遞)時

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

對於相同的輸入,我收到無效訊息,即 123456789

只是想知道為什麼會這樣?

更新: 是的,使用 value.search(regex) ,因此,就我而言,它運行“123456789”.search(/^\d{9,9}$/)

不確定以上是否是問題所在?

P粉996763314P粉996763314294 天前416

全部回覆(1)我來回復

  • P粉362071992

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

    似乎您的解決方案使用了錯誤的正規表示式

    當 Yup 的 search() 方法與正規表示式一起使用時,就會出現問題。 search() 方法傳回第一個符合項目的索引,且不計算完整字串。

    由於「123456789」連續包含9位數字,因此滿足正規表示式,search()方法傳回第一次出現的索引,即0。由於0是真值,所以Yup將其解釋為失敗的匹配並傳回無效訊息。

    這是您可以嘗試使用 /^\d{9}$/ 的正規表示式

    回覆
    0
  • 取消回覆