【问题标题】:JavaScript regular expression to negate an exact string match用于否定精确字符串匹配的 JavaScript 正则表达式
【发布时间】:2017-12-22 05:39:54
【问题描述】:

在 HTML (JavaScript) 中有没有办法编写正则表达式来否定精确的字符串匹配?

我想确保输入不等于“foo”。只有“foo”必须验证失败,但必须允许“fooo”。

换句话说,我正在寻找这个正则表达式的否定:

<input pattern="^foo$" ...>

【问题讨论】:

标签: javascript html regex validation


【解决方案1】:

一种可能的方法是将字符串锚点 (^) 的开头与包含目标字符串和字符串锚点结尾 ($) 的负前瞻结合起来:

/^(?!foo$)/

Demo

但是pattern 模式在那个帐户中很有趣 - 它必须匹配字符串中的某些内容,这就是原始方法不起作用的原因。但是,这确实有效:

<input pattern="(?!foo$).*">

【讨论】:

  • 这不允许“fooo”
  • 这确实允许fooo,检查演示(或者只是在控制台中运行/^(?!foo$)/.test('fooo'))。空字符串匹配,是的,因为^anchor
  • 对不起,你是对的 - 没有看到空匹配。早上太早了;-)
  • 没问题,也醒的有点早。 )
  • 有趣,不知道有什么区别。我什至不确定这不是规范或实现的错误。 ) 更新了答案。
【解决方案2】:

如果允许 Javascript,为什么不直接否定匹配结果?

if (!yourString.match(/^foo$/)) {
    ...
}

【讨论】:

  • 这行不通,因为它也不允许fooo。但它很容易修复:/^foo$/
【解决方案3】:

你可以使用这个正则表达式:

\bfooo\b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多