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

时间:2018-10-01 17:16:19

标签: javascript c# .net regex

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

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

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

3 个答案:

答案 0 :(得分: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中的行为相同。

答案 1 :(得分:0)

如果只想允许破折号,正斜杠和反斜杠,则可以省略^。这表示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));
});

答案 2 :(得分:0)

我对您的目标和您的代码有些困惑。因此,this what you want是吗?

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