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

Bay*_*ock 5 javascript regex jquery textarea

我想验证一个textarea,我只是没有得到正则表达式(它花了我一天和一堆教程来弄明白).

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

我的问题是:正则表达式中的标准"除了"之外是什么?

我正在使用javascript和jquery.

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

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

谢谢.

mur*_*d99 16

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

/[^.?!]/
Run Code Online (Sandbox Code Playgroud)

这符合不属于任何字符.,?!.

  • 在Stack Overflow上,我们通常更喜欢您使用投票而不是评论来表示问题是有用的,因为这样的评论通常被认为是噪音,而投票对其他人更有用. (2认同)
  • 您应该可以单击向上或向下箭头向上或向下投票 (2认同)
  • @Baylock你只能在某个代表之后上/下投票,这就是为什么你以前不能 (2认同)

Kry*_*cke 7

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

/^[^abc]*$/
Run Code Online (Sandbox Code Playgroud)

这意味着:"从开始到结束,没有a,bc".


Jua*_*des 2

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

\n\n

您提到的代码几乎是一个否定集,正如 murgatroid99 提到的那样,它^位于括号内。因此正则表达式将匹配该列表中不存在的任何内容。但看起来您确实想删除这些字符,因此您的正则表达式不需要被否定。

\n\n

您的代码应如下所示:

\n\n
str.replace(/[a-zA-Z0-9\xc3\xa9\xc3\xa8\xc3\xaa\xc3\xab\xc3\xb9\xc3\xbc\xc3\xa0\xc3\xa2\xc3\xb6\xc3\xaf\xc3\xa7\\"\\/\\%\\(\\).\'?!,@$#-_ \\n\\r]/g, "");\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

另外,chrome 不喜欢正则表达式中的 \xc2\xa7,您必须将\\x与字符的十六进制代码一起使用

\n