我想验证一个textarea,我只是没有得到正则表达式(我花了一天时间和一堆教程来解决它。)
基本上我希望能够允许所有内容(包括换行符和战车),但可能是恶意的角色(那些会导致安全漏洞的角色)。 由于很少有不允许使用的字符,我认为创建黑名单比使用白名单更有意义。
我的问题是:Regex中标准的“除了”之外的是什么?
我正在使用javascript和jquery。
我尝试了这个但它不起作用(这很糟糕,我知道......):
var messageReg = /^[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#§-_ \n\r]+$/;
谢谢。
答案 0 :(得分:16)
如果要排除一组字符(例如,一些标点字符),您可以在字符集的开头使用^
运算符,例如
/[^.?!]/
匹配任何非.
,?
或!
的字符。
答案 1 :(得分:7)
您可以使用^
作为方括号[]
中的第一个字符来否定其中的内容:
/^[^abc]*$/
这意味着:“从头到尾,没有a
,b
或c
。”
答案 2 :(得分:1)
正如Esailija所说,这对真正的安全无效。
你提到的代码几乎是一个否定的集合,正如murgatroid99所提到的,^
在括号内。因此,正则表达式将匹配该列表中不存在的任何内容。但看起来你真的想要去除那些角色,所以你的正则表达式不需要被否定。
您的代码应如下所示:
str.replace(/[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#-_ \n\r]/g, "");
也就是说,删除正则表达式中的所有字符。
然而,这就是说你不想保留a-zA-Z0-9
你确定要把它们除掉吗?
另外,chrome不喜欢正则表达式中的§,你必须使用\x
以及角色的十六进制代码