字符串中的所有字符必须与正则表达式匹配

8

非常抱歉,如果之前已经有类似的内容,请见谅,但我在谷歌上找不到我需要的答案。

我有一个字段,你可以在里面编写表达式:x>1x>2||x<1, (x>1) && (x<2) 等等。 我希望有一个正则表达式,它可以检查这个表达式,只能包含一定类型的有效字符,以防止代码注入。例如,a.1 不应该匹配。

到目前为止,我使用的是:

expression.match('[xX<>=|0-9&().]')

但是这也会返回包含任何这些字符的内容。我想要的是一个表达式,只有当所有字符匹配正则表达式中的任何一个字符时才返回。

1个回答

20
您的字符类和锚点之后需要 *+ 量词:
/^[xX<>=|0-9&()\s.]*$/.test(expression)
 ^                 ^^

现在,它将匹配

  • ^ - 字符串的开头
  • [xX<>=|0-9&\s().]* - 在字符类中定义的字符的零个或多个(如果使用+,则为一个或多个)
  • $ - 字符串的结尾。

简短示例:

console.log(/^[xX<>=|0-9&\s().]*$/.test("a.1"));
console.log(/^[xX<>=|0-9&\s().]*$/.test("(x>1) && (x<2)"));

请注意,我添加了\s以匹配空格。


由于 (x>1) && (x<2) 包含空格,我建议将 \s 添加到模式中。 - Wiktor Stribiżew
哦,如果你不使用RegExp构造函数,那么你必须在开头和结尾添加/来告诉编译器它是一个正则表达式?为什么要使用这个而不是构造函数呢? - President Camacho
参见 MDN RegExp 帮助正则表达式字面量在脚本加载时提供正则表达式的编译。当正则表达式保持不变时,使用它可以获得更好的性能... 使用 [RegExp] 构造函数提供正则表达式的运行时编译。当您知道正则表达式模式将会改变或者您不知道模式并且从其他来源(例如用户输入)获取时,请使用构造函数。 - Wiktor Stribiżew
好的,非常感谢,我会在5分钟内将您的答案标记为正确。 - President Camacho
1
花了我半天的工作时间才找到这个帖子并解决了我的问题。真希望我能给这个答案点赞两次。 - Tom
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接