正则表达式:允许除某些选定字符之外的所有内容[重复]
Posted
技术标签:
【中文标题】正则表达式:允许除某些选定字符之外的所有内容[重复]【英文标题】:Regex: allow everything but some selected characters [duplicate] 【发布时间】:2012-08-19 07:47:08 【问题描述】:我想验证一个文本区域,但我没有得到正则表达式(我花了一天的时间和一堆教程才弄明白)。
基本上我希望能够允许一切(包括换行符和战车),但可能是恶意的字符(那些会导致安全漏洞的字符)。 由于不允许使用的字符很少,我认为创建黑名单比创建白名单更有意义。
我的问题是:Regex 中的标准“除此之外的一切”是什么?
我正在使用 javascript 和 jquery。
我试过了,但它不起作用(这很糟糕,我知道..):
var messageReg = /^[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#§-_ \n\r]+$/;
谢谢。
【问题讨论】:
它不起作用是什么意思?使用该正则表达式的代码是什么? 这不会对安全起任何作用。无需 javascript 甚至无需使用浏览器也可以提交表单(因为它只是某种类型的 HTTP 请求)。 RegEx 并不是真正避免安全漏洞的正确方法。这个thread 可能会感兴趣。 XSS 防御不是用正则表达式来完成的。 javascript 验证是为了节省用户等待服务器返回验证错误的时间。它对安全毫无用处。 你想接受什么,你想排除什么? 【参考方案1】:如果您想排除一组字符(例如一些标点符号),您可以在字符集的开头使用^
运算符,在正则表达式中
/[^.?!]/
这匹配任何不是.
、?
或!
的字符。
【讨论】:
在 Stack Overflow 上,我们通常更喜欢您使用投票而不是 cmets 来表示问题是有帮助的,因为这样的 cmets 通常被认为是噪音,而投票对其他人更有用。 是的,我这样做的原因是我不知道如何在这里投票。我所拥有的只是检查绿旗的能力。但是只允许一个标志和太多好的答案。我正在试图弄清楚这件事,但仍然没有任何线索。 你应该可以点击向上或向下箭头来投票赞成或反对 谢谢。不久前,我无法做到这一点。不管怎样,我投票了! @Baylock 你只能在某个代表之后投票赞成/反对,这就是为什么你以前不能【参考方案2】:您可以使用^
作为括号[]
内的第一个字符来否定其中的内容:
/^[^abc]*$/
这意味着:“从头到尾,没有a
、b
或c
。”
【讨论】:
【参考方案3】:正如 Esailija 所说,这对真正的安全性没有任何帮助。
你提到的代码几乎是一个否定集,正如 murgatroid99 提到的,^
放在括号内。因此,正则表达式将匹配不在该列表中的任何内容。但看起来你真的想去掉那些字符,所以你的正则表达式不需要被否定。
您的代码应如下所示:
str.replace(/[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#-_ \n\r]/g, "");
也就是说,删除我的正则表达式中的所有字符。
但是,这就是说您不想保留a-zA-Z0-9
,您确定要删除它们吗?
另外,chrome 不喜欢正则表达式中的 §,您必须使用 \x
以及字符的十六进制代码
【讨论】:
基本上,我想允许这些角色(这是一个很大的集合,但它是为了以后减肥)。谢谢你的解释以上是关于正则表达式:允许除某些选定字符之外的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章