【问题标题】:Ui-router route parameter with regex带有正则表达式的 ui-router 路由参数
【发布时间】:2014-10-30 12:06:30
【问题描述】:

我觉得这很简单,但我无法让它工作......

我正在使用Ui-Router 2.11,其中包括可选参数with regex expressions.

我有这个 有效的网址

'/event/{eventId:[0-9]}'

它会过滤掉所有非数字的内容,但它仅适用于输入的 1 个字符(因此仅适用于 0 到 9)。

我想用一个表达式替换它,该表达式检查以确保输入中的所有字符都是数字,这样我就可以输入任何输入,只要它都是数字。

我尝试使用来自this thread 的表达式

'/event/{eventId:^[0-9]+$}'

但它不起作用。其他示例包括我不能使用的正斜杠(通过 ui-router 文档中的warning)。这感觉应该非常简单,我做错了什么?

【问题讨论】:

  • 尝试删除 $ 符号。

标签: javascript regex angularjs angular-ui-router


【解决方案1】:

从链接的文档来看,我认为这些表达式中的任何一个都可以解决问题:

'/event/{eventId:[0-9]+}'//match 1 or more digit
'/event/{eventId:[0-9]{1,}}'//same as above, alternative notation

如果可能的话,我会将[0-9] 替换为\d。它只是看起来更干净。

【讨论】:

  • 效果很好!为什么美元符号会绊倒它? From what I can tell 它应该表示字符串的结尾——是不是因为在我正在寻找的参数之后我可能在 URL 中有更多的输入?
  • @MattFoxxDuncan:我正在查看源 ATM。你的模式是这样转义的:` var result = string.replace(/[\\[]\^$*+?.()|{}]/g, "\\$&");. It would seem that the $`符号实际上被转义,匹配文字$。可能是因为参数不必是 URI 的结尾(应该允许使用斜杠、GET 参数或 # 锚)。不过还不确定。无论哪种方式,您都在定义规则。如果规则是\d+,这就足够了:值必须是全数字。字符串的开头和结尾在这方面无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多