Regex:允许除某些选定字符之外的所有字符

Regex: allow everything but some selected characters

本文关键字:字符 Regex      更新时间:2023-09-26

我想验证一个文本区域,但我没有得到regex(我花了一天时间和一堆教程才弄清楚)。

基本上,我希望能够允许一切(包括断线和战车),但可能是恶意的角色(那些会导致安全漏洞的角色)。由于很少有字符是不允许的,我认为创建黑名单比创建白名单更有意义。

我的问题是:Regex的标准"除此之外的一切"是什么?

我使用的是javascript和jquery。

我试过了,但不起作用(我知道,这很糟糕…):

var messageReg = /^[a-zA-Z0-9éèêëùüàâöïç'"'/'%'(').'?!,@$#§-_ 'n'r]+$/;

谢谢。

如果您想排除一组字符(例如,一些标点符号),您可以在字符集的开头使用^运算符,在类似的正则表达式中

/[^.?!]/

这将匹配任何不是.?!的字符。

您可以使用^作为括号[]内的第一个字符来否定其中的内容:

/^[^abc]*$/

这意味着:"从开始到结束,没有abc。"

正如Esailija所提到的,这对真正的安全性没有任何作用。

您提到的代码几乎是一个否定集,正如murgaroid99所提到的,^位于括号内。因此,正则表达式将匹配该列表中没有的任何内容。但看起来您真的想去掉这些字符,所以您的regexp不需要被否定。

你的代码应该看起来像:

str.replace(/[a-zA-Z0-9éèêëùüàâöïç'"'/'%'(').'?!,@$#-_ 'n'r]/g, "");

也就是说,删除正则表达式中的所有字符。

然而,也就是说你不想保留a-zA-Z0-9,你确定要把它们去掉吗?

此外,chrome不喜欢正则表达式中的§,您必须使用'x和字符的十六进制代码