字符串一次必须包含一个特定字符

时间:2018-08-05 16:14:49

标签: javascript regex

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

假设我需要一个正则表达式来验证例如一句话,在任何地方都只包含一个$字符。

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

该怎么做?

3 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式:

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

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

答案 1 :(得分:2)

允许$的任一边的$以外的任意数量的字符:

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.");

答案 2 :(得分:1)

首先,请记住$在正则表达式中具有特殊含义,因此您需要使用\$来引用它(以反斜杠转义)。唯一的例外是:在字符类中,您无需对其进行转义。

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

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

  • 字符串的乞求
  • 零个或多个一美元的字符
  • 一美元
  • 零个或多个一美元的字符
  • 字符串的结尾

而且,您要做的就是

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

要解释[^$]表示法:^的意思是“不是”。

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