4

我需要确保给定的字符串不是“选择一个值”。就是这样,除了这个确切的字符串之外,其他任何东西都应该与模式匹配。

我一直在环顾四周,并在http://www.regular-expressions.info/javascriptexample.html上尝试了许多组合,但似乎没有任何效果。

我不能否定测试,模式需要完成这一切,因为我将把它提供给表单验证框架。如果选择包含这个文本,我会返回一个错误,等等。所以模式必须匹配其他任何东西,除了这个确切的字符串,

我尝试了很多东西,

(?!Select an account)
!(Select an account)
!(^(Select an account)$)

等等......显然我不明白其中一些机制是如何工作的。我得到“开始于”和“结束于”,但我似乎没有找到一个简单的否定运算符。

出于某种原因,我到处寻找正则表达式解释我没有得到这个简单的用例,也许它并不常见。

我怎样才能做到这一点?

谢谢!

4

4 回答 4

10

我相信这是在问类似的问题:

正则表达式和否定整个字符组

在你的情况下,你可以使用类似的东西

    ^(?!Select a value).*$

这将匹配不以“选择一个值”开头的所有内容。

于 2013-04-19T03:02:16.587 回答
2

与其考虑否定的正则表达式,不如做一个肯定的表达式并否定条件:

if (! /^Select an account$/.test(mystring)) {
  // String is not "Select an account"
}

但是无论如何您都不需要正则表达式:

if (mystring != 'Select an account') {
  // String is not "Select an account"
}

或者,如果您想要“包含”:

if (mystring.indexOf('Select an account') == -1) {
  // String does not contain "Select an account"
}
于 2013-04-19T02:44:22.667 回答
0

我可能没有正确理解这一点。这不行吗?

if (string != "Select a value") {
    //code here
}

我不知道你为什么需要正则表达式来做到这一点,这就是为什么我担心我可能不理解你的问题是什么。

于 2013-04-19T02:49:40.793 回答
0

如果您在 HTML5 表单验证中处理正则表达式并且输入的模式属性比一个确切的字符串更复杂,则另一种解决方案如下(javascript):

function findAllNotPattern(inputField) {
    var allBut1 = inputField.getAttribute("pattern")
    var allBut2 = allBut1.slice(0, 1) + "^" + allBut1.slice(1)
    var allButRe = new RegExp(allBut2, "g")
    return allButRe
}

如果你想在纯 javascript 中运行它,你可以使用:

findAllNotPattern(document.getElementById("inputFieldId"))
于 2017-10-25T21:34:53.370 回答