正则表达式行为的差异
P粉996763314
P粉996763314 2024-04-01 13:33:29
0
1
303

我正在尝试构建一个正则表达式来匹配应包含 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粉996763314
P粉996763314

全部回复(1)
P粉362071992

似乎您的解决方案使用了错误的正则表达式

当 Yup 的 search() 方法与正则表达式一起使用时,就会出现问题。 search() 方法返回第一个匹配项的索引,并且不计算完整字符串。

由于“123456789”连续包含9位数字,因此满足正则表达式,search()方法返回第一次出现的索引,即0。由于0是真值,所以Yup将其解释为失败的匹配并返回无效消息。

这是您可以尝试使用 /^\d{9}$/ 的正则表达式

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!