编写正则表达式时,我只知道如何指定字符串中允许的内容,但是我不知道如何指定字符串中必须包含的内容。
假设我需要一个正则表达式来验证例如一句话,在任何地方都只包含一个$
字符。
"This $ should validate."
"This shouldn't validate."
"This $ should not $ validate either."
该怎么做?
答案 0 :(得分:3)
答案 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()
来确定您的字符串是否通过此条件。