正则表达式仅允许某些特殊字符并限制下划线

Posted

技术标签:

【中文标题】正则表达式仅允许某些特殊字符并限制下划线【英文标题】: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 我还不够清楚,但你还是搞定了,干得好 【参考方案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

【讨论】:

以上是关于正则表达式仅允许某些特殊字符并限制下划线的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式检查用户输入是不是仅包含特殊字符?

用于文本框验证的 HTML5 正则表达式模式:仅允许字母、空格和某些字符

jq正则表达式,除了特殊字符之外的都可以输入,限制5-10位

在 C# 中具有流畅验证的正则表达式 - 如何在密码中不允许空格和某些特殊字符?

仅名字的正则表达式英语

在 EditText 中仅允许基于正则表达式的选定字符