检查url是否包含express中的数字

时间:2018-03-03 13:00:31

标签: javascript node.js express

我正在nodejs中创建一个中间件函数并表达js框架,我想检查url是否包含一个数字或者不是这样的

/ invoices / 21或/ invoices / 45

所以我试图做这样的事情

 if (req.path.startsWith('/invoices/[^0-9]') {
    next();
  }  

但我收到错误我仍然无法这样做,任何人都可以提示。

4 个答案:

答案 0 :(得分:0)

你不能使用这样的RegExp。 startsWith只接受一个字符串。此代码创建一个RegExp,并使用match来检查字符串是否与RegExp匹配。

if (req.path.match(new RegExp('/invoices/[^0-9]'))) { // create a regexp and check if it matches
    next();
} 

答案 1 :(得分:0)

startsWith接收字符串而非正则表达式。在这种情况下,您可以使用match

var str = '/invoices/120';
if (str.match(/^\/invoices\/\d+/)) { // return truly value
  next(); // gets executed
} 

var str = '/invoices/abc';
if (str.match(/^\/invoices\/\d+/)) { // return falsy value
  next();
} 

您可以在jsfiddle中查看。

答案 2 :(得分:0)

最快的方法是查看RegExp

if(RegExp(/^\/invoices\/[0-9]/).test(req.path)){
    // do something
}

答案 3 :(得分:0)

  const re = /^\/invoices(\/.*)?\/\d*\//
  if(re.test(req.originalUrl.toLowerCase())) {
    // include a number
  }

//'/invoices/kk/190/foo' will pass
//'/invoices/kk/190k/foo' won't pass

您使用的是什么版本的快递?我只能通过req.originalUrl访问路径,没有req.path。