正则表达式允许一些特殊字符c#

正则表达式允许一些特殊字符c#,c#,regex,C#,Regex,我必须检查一个字符串是否包含特殊字符,但我可以允许在其中包含这5个特殊字符 我已经把我的正则表达式写成 var specialCharacterSet = "^[()_-.]"; var test = Regex.Match("a!", specialCharacterSet); var isValid = test.Success; 但它抛出了一个: 按相反顺序分析“^[()-.]”-[x-y]范围时出错 您已使用-指定了一个范围。将其放在末尾: [()_.-] 否则,范围不正确:下界符号

我必须检查一个字符串是否包含特殊字符,但我可以允许在其中包含这5个特殊字符

我已经把我的正则表达式写成

var specialCharacterSet = "^[()_-.]";
var test = Regex.Match("a!", specialCharacterSet);
var isValid = test.Success;
但它抛出了一个:

按相反顺序分析“^[()-.]”-[x-y]范围时出错


您已使用
-
指定了一个范围。将其放在末尾:

[()_.-]
否则,范围不正确:下界符号
\uu
出现在字符表中的时间晚于上界符号

此外,如果您计划检查字符串中的任何字符是否属于此集合,则应删除仅在字符串开头检查的
^

要测试字符串是否符合某种模式,请使用:

指示正则表达式是否在输入字符串中找到匹配项

更新

要接受任何不包含这五个字符的字符串值,可以使用

var str = "file.na*me";
if (!Regex.IsMatch(str, @"[()_.-]"))
    Console.WriteLine(string.Format("{0}: Valid!", str));
else
    Console.WriteLine(string.Format("{0}: Invalid!", str));

-
放在末尾或
转义
以避免其形成无效范围。
-
字符类中
形成一个范围。此处

是十进制的
95

是十进制的
46


因此,它形成了一个从
95到46的无效范围
你可以使用
^[()\-.]
^[()\.-]
如果你使用特殊字符,那么最好在任何特殊字符(在regex特殊字符中使用)之前使用
\

就C而言,最好的方法是[()\-.]。和-是正则表达式的保留字符。您需要在这些保留字符之前使用转义字符。

因此我的正则表达式应该是var specialCharacterSet=“^[A-Za-z0-9()514;]+$”;要允许字母数字和我提到的5个特殊字符,如果您计划匹配任何Unicode字母和数字,我建议使用
\w
,因为它匹配
[\p{L}\p{N}\uz]
^[\w().-]+$
\p{N}
速记Unicode类别匹配所有类型的数字,
\p{L}
匹配任何类型的字母。regex应该接受任何不包含我提到的五个字符的字符串值。我想上面我评论的正则表达式就可以了。请让我知道它是否会用上述要求的确切代码更新答案。我使用了此代码,但它的意思是,此“file.na*me”不应该在这里,而此代码可能会回答问题,提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
不是字符类中的特殊字符,
-
在第一个或最后一个位置时不需要转义。直到我将这些字符作为特殊字符处理后,我的程序才起作用。举个例子,你觉得下面的表达式怎么样@“^([A-Za-z0-9&+().-]*)$”您认为它是否允许用户输入。和-字符作为输入?请您自己使用visual studio 2019尝试一下。如果您成功允许用户输入。和-使用@“^([A-Za-z0-9&+().-]*)$”字符,然后请在此处发布您的c#和HTML代码。让我这样的人可以学习。
 var specialCharacterSet = "^[()_.-]";
        var test = Regex.IsMatch("a!", specialCharacterSet);
        Console.WriteLine(test);
        Console.ReadLine();
[()_.-]
 var specialCharacterSet = "^[()_.-]";
        var test = Regex.IsMatch("a!", specialCharacterSet);
        Console.WriteLine(test);
        Console.ReadLine();