正则表达式:允许除一些选定字符之外的所有字符

时间:2012-08-23 18:09:56

标签: javascript jquery regex textarea

我想验证一个textarea,我只是没有得到正则表达式(我花了一天时间和一堆教程来解决它。)

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

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

我正在使用javascript和jquery。

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

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

谢谢。

3 个答案:

答案 0 :(得分:16)

如果要排除一组字符(例如,一些标点字符),您可以在字符集的开头使用^运算符,例如

/[^.?!]/

匹配任何非.?!的字符。

答案 1 :(得分:7)

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

/^[^abc]*$/

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

答案 2 :(得分:1)

正如Esailija所说,这对真正的安全无效。

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

您的代码应如下所示:

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

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

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

另外,chrome不喜欢正则表达式中的§,你必须使用\x以及角色的十六进制代码