【问题标题】:Regex to allow only certain special characters and restrict underscore正则表达式仅允许某些特殊字符并限制下划线
【发布时间】:2019-03-06 20:16:05
【问题描述】:

正如标题所示,我只想允许来自特殊字符的 - / \(破折号、正斜杠、反斜杠)。下面这个正则表达式在做什么,但它与下划线不匹配。我该怎么做?

JavaScript:/[^\w\-\/\\]/gi

.NET:^[\w-\/\\]*$

【问题讨论】:

  • “我只想允许 - / \”。但是您将它们包括在否定类中?
  • 请注意 /[^\w\-\/\\]/gi 不匹配 _ 因为 [^\w] 不匹配。 ^[\w-\/\\]*$ 匹配 _。所以,请多解释一下你到底需要什么。
  • @psy 您是否试图防止 SQL 注入或“错误”密码?
  • @TerryCarmen just input.replace on certain patterns
  • @WiktorStribiżew 我还不够清楚,但你还是搞定了,干得好

标签: javascript c# .net regex


【解决方案1】:

你可以在你的 JS 正则表达式中添加一个替代:

var pattern = /(?:[^\w\/\\-]|_)/g;
               ^^^          ^^^

请参阅regex demo。此模式可用于删除 JS 中不需要的字符。

在 .NET 正则表达式中,您可以使用character class substraction,并且该模式可以写成

var pattern = @"[^-\w\/\\-[_]]";

.NET regex demo

要匹配仅允许 -/\ + 字母/数字的整个字符串,请使用

var pattern = /^(?:(?!_)[\w\/\\-])*$/;
var pattern = @"^[-\w/\\-[_]]*$";

请参阅此JS regex demo.NET regex demo

在这里,^(?:(?!_)[\w\/\\-])*$ / ^[-\w/\\-[_]]*$ 匹配整个字符串(^$ 锚点需要完整的字符串匹配),其中仅包含单词 /\- 字符。

注意:在 C# 中,\w 默认匹配比 JS 正则表达式中的 \w 更多。您需要使用 RegexOptions.ECMAScript 选项来使 \w 的行为方式与 JS 中的方式相同。

【讨论】:

    【解决方案2】:

    如果您只想允许破折号、正斜杠和反斜杠,那么您可以省略^。这意味着negated character class

    您还可以使用\w 来匹配和下划线,并将连字符添加为字符类中的第一个字符。

    /[-\w/\\]/g

    要匹配整个字符串,您可以使用量词 + 让字符类匹配一次或多次,并以字符串锚点的 ^ 开始和 $ 结束:

    ^[-\w/\\]+$

    Regex demo

    const regex = /^[-\w/\\]+$/g;
    const strings = [
      "test2_/\\",
      "test2$_/\\"
    ];
    strings.forEach((str) => {
      console.log(str.match(regex));
    });

    【讨论】:

      【解决方案3】:

      我对你的目标和你的代码有点困惑。那么,是this what you want 吗?

      模式 - /[\\\/-]/g

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多