代码之家  ›  专栏  ›  技术社区  ›  tom

字符串必须包含一次特定字符[重复]

  •  -2
  • tom  · 技术社区  · 8 年前

    在编写正则表达式时,我只知道如何指定字符串中允许包含的内容,但不知道如何指定字符串中必须包含的内容。

    假设我需要一个regex来验证,例如一个包含一个 $ 任何地方的角色。

    "This $ should validate."
    "This shouldn't validate."
    "This $ should not $ validate either."
    

    怎么做?

    3 回复  |  直到 8 年前
        1
  •  1
  •   Max    8 年前

    首先,记住 $ 在正则表达式中有特殊的含义,因此需要使用 \$ (用反斜杠转义)。有一个例外:在一个字符类中,不需要转义它。

    它通常的特殊含义是“字符串的结尾”

    你真正想要的是一个匹配的正则表达式

    • 绳子的乞求,
    • 零个或多个字符 不是 一美元
    • 一美元
    • 零个或多个字符 不是 一美元
    • 绳子的末端

    你这样做的方式是

    • ^
    • [^$]*
    • \$
    • [^$]*
    • $

    解释 [^$] 符号:the ^ 意思是“不”。

    最后一个正则表达式是 ^[^$]*\$[^$]*$ . 你可以用 str.test() 以确定字符串是否通过此条件。

        2
  •  3
  •   blhsing    8 年前

    您可以使用以下regex:

    ^[^$\n]*\$[^$\n]*$
    

    演示: https://regex101.com/r/PBzsRH/1

        3
  •  2
  •   T.J. Crowder    8 年前

    允许除 $ 两边都可以 $ :

    isValid = /^[^$]*\$[^$]*$/.test(theString);
    

    这个 ^ $ 分别断言开始和结束; [^$] 除了 $ . * 意思是“零次或多次”。这个 \$ 中间是允许的文字 $ .

    测试字符串的实时示例:

    function test(theString) {
        var isValid = /^[^$]*\$[^$]*$/.test(theString);
        console.log(theString, "=>", isValid ? "valid" : "invalid");
    }
    test("This $ should validate.");
    test("This shouldn't validate.");
    test("This $ should not $ validate either.");