【问题标题】:JSLint reports “Insecure '^'” on "^&;" from JavaScript: The Good Parts - ignore? [duplicate]JSLint 在“^&;”上报告“不安全的 '^'”来自 JavaScript: The Good Parts - 忽略? [复制]
【发布时间】:2013-02-08 09:14:03
【问题描述】:

JavaScript: The Good Parts p41 包含以下正则表达式:

/&([^&;]+);/g

用于查找所有 HTML 实体,例如 >。如果有人使用 JSLint 验证此代码,它会报告

不安全的'^'

虽然严格来说这是正确的,但我仍然认为可以忽略它。还是不行?

【问题讨论】:

  • 不应该是/&([^&;]+?);/g吗?
  • 您需要{1,10} 或其他东西才能使您的正则表达式起作用 - 目前它不会匹配>(但会匹配&g;)。
  • @RichieHindle 不,_rausch 是对的。应该是惰性匹配。此外,问题与此无关。
  • @rausch,你是对的 - 差不多。我忘了一个'+'。 Crockford 书中的代码示例中有“+”。哦,有人刚刚编辑了我的帖子来解决这个问题,谢谢。
  • @SalmanA,我确实知道 JSLint 想告诉我什么。如果我必须重写正则表达式以避免'^',我基本上必须列出在 HTML 实体中实际找到的所有字符。在我看来这是不切实际的。

标签: javascript regex


【解决方案1】:

警告正则表达式可能匹配多于预期,警告是正确的;它会匹配像“&abc def ghi;”这样的东西,尽管它们是非法的实体名称。另一方面,在这种情况下它可能不是一个严重的问题(尽管它严格取决于您匹配后的操作);你可以很容易地在 JSLint 中禁用它。

更好的 RE 应该是:

/&(#[0-9]+|#[xX][a-fA-F0-9]+|[a-zA-Z0-9]+);/

我不记得实体名称中允许使用哪些其他字符,唉。

【讨论】:

    【解决方案2】:

    为实际问题提供答案。如果您知道它为什么是不安全并且可以接受,请忽略它。如果您对 JSLint 的抱怨感到恼火,请修复它。 ;)

    我会认为它足够安全

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2011-05-23
      • 2021-04-02
      • 2011-07-14
      相关资源
      最近更新 更多