【问题标题】:Why is test() returning True when it should fail? [duplicate]为什么 test() 在它应该失败时返回 True? [复制]
【发布时间】:2018-09-06 21:14:28
【问题描述】:

我有这段代码,我想知道为什么它会记录 true

console.log(/[A-Za-z0-9-_:]/.test('zoom^Bar'));

我会假设插入符号会使正则表达式失败,为什么它会通过?

只想说这个问题很简单,但可能对其他人有帮助,而且“重复”问题对我来说并不真正喜欢简单的欺骗。

【问题讨论】:

  • 它不检查整个字符串。它检查字符集中的字符是否与输入字符串匹配。
  • 我尝试了 /g 标志,但还是一样
  • 如何让它测试整个字符串?
  • 你在找console.log(/^[A-Za-z0-9-_:]+$/.test('zoom^Bar'));
  • 函数test 返回真,因为它找到了匹配项。您需要锚点来确保整个字符串中不存在其他字符。这个问题很可能是重复的。

标签: javascript node.js regex


【解决方案1】:

试试这个:

console.log(/^[A-Za-z0-9-_:]+$/.test('zoom^Bar'))

【讨论】:

  • @MrCholo 您的原始正则表达式匹配单个字符,而这个匹配一个或多个字符(请参阅末尾的 +)。此外,这匹配整个字符串,^ 表示开始,$ 表示结束。因此,它返回 false。
  • 当然。在您使用的正则表达式中,它会查找 A-Z 或 0-9 等中的一个字母......即使这个词是 a^{}÷π 它也会通过,因为它发现了“a”的出现。所以你只需要添加开始符号^然后是你想在单词中出现的字母,然后是+符号,表示这些字母必须出现一次或多次,然后是结束符号$
  • 连字符在您的角色类别中的位置错误。要包含文字连字符,请将其放在集合中的第一个或最后一个(或转义它)。见regular-expressions.info/charclass.html
  • 没关系,只要-不在两个字符之间,这样使用它肯定没问题
猜你喜欢
  • 2021-11-10
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多