【问题标题】: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 验证是为了节省用户等待服务器返回验证错误的时间。它对安全毫无用处。
  • 你想接受什么,你想排除什么?

标签: javascript jquery regex textarea


【解决方案1】:

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

/[^.?!]/

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

【讨论】:

  • 在 Stack Overflow 上,我们通常更喜欢您使用投票而不是 cmets 来表示问题是有帮助的,因为这样的 cmets 通常被认为是噪音,而投票对其他人更有用。
  • 是的,我这样做的原因是我不知道如何在这里投票。我所拥有的只是检查绿旗的能力。但是只允许一个标志和太多好的答案。我正在试图弄清楚这件事,但仍然没有任何线索。
  • 你应该可以点击向上或向下箭头来投票赞成或反对
  • 谢谢。不久前,我无法做到这一点。不管怎样,我投票了!
  • @Baylock 你只能在某个代表之后投票赞成/反对,这就是为什么你以前不能
【解决方案2】:

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

/^[^abc]*$/

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

【讨论】:

    【解决方案3】:

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

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

    您的代码应如下所示:

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

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

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

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

    【讨论】:

    • 基本上,我想允许这些角色(这是一个很大的集合,但它是为了以后减肥)。谢谢你的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多