regex行为的差异

gwbalxhn  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(108)

我试图建立一个正则表达式,以匹配一个字段,其中应该包含正好9位数
我使用下面的正则表达式

/^\d{9,9}$/

现在的问题是

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

但是,当我尝试使用相同的正则表达式(在下面的myRegex中传递)使用Yup的匹配时

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

对于相同的输入,我得到无效消息,即123456789
只是想知道为什么会这样?

**更新:**Yup使用value.search(regex),因此,在我的情况下,它运行“123456789”.search(/^\d{9,9}$/)

不确定上面的问题是不是问题?

dgenwo3n

dgenwo3n1#

看起来你在你的解决方案中使用了错误的正则表达式
当将Yup的search()方法与正则表达式一起使用时,就会出现问题。search()方法返回第一个匹配项的索引,但不计算整个字符串。
由于“123456789”包含9个连续的数字,因此满足正则表达式,并且search()方法返回第一个匹配项的索引,即0。由于0是一个truthy值,Yup将其解释为失败的匹配并返回无效消息。
下面是可以使用/^\d{9}$/尝试的正则表达式

相关问题