5

我想验证一个文本区域,但我没有得到正则表达式(我花了一天的时间和一堆教程才弄明白)。

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

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

我正在使用 javascript 和 jquery。

我试过这个,但它不起作用(这很糟糕,我知道..):

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

谢谢你。

4

3 回答 3

21

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

/[^.?!]/

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

于 2012-08-23T18:14:03.593 回答
8

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

/^[^abc]*$/

这意味着:“从头到尾,没有a,,bc。”

于 2012-08-23T18:14:47.493 回答
1

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

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

您的代码应如下所示:

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

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

但是,这就是说您不想保留a-zA-Z0-9,您确定要删除它们吗?

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

于 2012-08-23T18:17:03.023 回答