我正在创建一个函数,用于检查当前url是否与我想要的格式完全匹配。
如果当前URL是可接受的URL列表的一部分,我想“批量检查”。
我设法用REGEX做到了:
const validateOpinionPath = (currentUrl: string): boolean => {
const regexPatter = /opinion\/[0-9a-z-]*\/(large|medium|small)$/g
const matchResult = currentUrl.match(regexPatter)
return !!matchResult
}
但是我想知道如何使用matchPath
(或react-router-dom
提供的任何其他功能)来做到这一点。
我尝试了以下操作,但它仅与第一个网址匹配:
const validateOpinionPath = (currentUrl: string): boolean => {
const match = matchPath(currentUrl, {
path:
'/option/:opinionId/large' ||
'/option/:opinionId/medium' ||
'/opinion/:opinionId/small',
exact: true,
strict: false
})
return !!match
}
我想完全匹配这些路线:
'/option/:opinionId/large',
'/option/:opinionId/medium',
'/opinion/:opinionId/small'
'/option/:opinionId/large/something'
应该返回false
答案 0 :(得分:1)
之所以为什么用||
分隔符分隔的多个字符串不起作用,是因为如果第一个字符串是伪造的值(例如空),则只会选择第二个字符串作为path
属性的值字符串。
因为在您的情况下,第一个字符串不是伪造的值,所以path
属性的值始终是第一个字符串,即'/option/:opinionId/large'
。
您可以在传递给path
的options对象中传递字符串数组作为matchPath()
属性值。这样,将检查每个路径,而不仅仅是第一个。
const match = matchPath(currentUrl, {
path: [
'/option/:opinionId/large',
'/option/:opinionId/medium',
'/opinion/:opinionId/small'
],
exact: true,
strict: false
})
答案 1 :(得分:0)
我希望这会成功!
const validateOpinionPath = (currentUrl: string): boolean => {
const match = matchPath(currentUrl, {
path: '/option/:opinionId/*'
exact: true,
strict: false
})
return !!match
}
答案 2 :(得分:0)