我试图建立一个正则表达式,以匹配一个字段,其中应该包含正好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}$/)
不确定上面的问题是不是问题?
1条答案
按热度按时间dgenwo3n1#
看起来你在你的解决方案中使用了错误的正则表达式
当将Yup的search()方法与正则表达式一起使用时,就会出现问题。search()方法返回第一个匹配项的索引,但不计算整个字符串。
由于“123456789”包含9个连续的数字,因此满足正则表达式,并且search()方法返回第一个匹配项的索引,即0。由于0是一个truthy值,Yup将其解释为失败的匹配并返回无效消息。
下面是可以使用
/^\d{9}$/
尝试的正则表达式