我用我的正则表达式检查一些字符串,不知何故它不完美。我不知道为什么。我想允许只包含这些字符的字符串:
所以我认为这个正则表达式应该足够了:
Regex("[^A-Z0-9.$/+%\\- ]$")
但是有些字符串并没有真正发挥作用。我做了一个小例子:
static Regex regex = new Regex("[^A-Z0-9.$/+%\\- ]$");
static void Main()
{
string s;
Console.WriteLine("check: \n");
s = "?~=) 2313";
Console.WriteLine(s + ": " +IsValid(s));
s = "ÄÜÖ";
Console.WriteLine(s + ": " + IsValid(s));
s = "Ü~=) 2313";
Console.WriteLine(s + ": " + IsValid(s));
s = "Ü 2313";
Console.WriteLine(s + ": " + IsValid(s));
s = "~=) 2313 Ü";
Console.WriteLine(s + ": " + IsValid(s));
s = "ÜÜÜ";
Console.WriteLine(s + ": " + IsValid(s));
s = "~=)";
Console.WriteLine(s + ": " + IsValid(s));
s = "THIS--STRING $1234567890$ SHOULD BE VALID.%/ +";
Console.WriteLine(s + ": " + IsValid(s));
Console.ReadKey();
}
public static bool IsValid(string input)
{
if (regex.IsMatch(input)) return false;
return true;
}
作为输出我得到:
1.,3。和4.是真的,但这是错的。我的正则表达式出了什么问题?有任何想法吗?谢谢
答案 0 :(得分:1)
应该是
^[A-Z0-9.$/+%\\- ]+$
| ||match end of the string
| |
| |match one or more characters of [A-Z0-9.$/+%\\- ]
|start of the string
您需要使用+
,*
等量词来匹配多个字符
您的 IsValid 类应为
public static bool IsValid(string input)
{
if (regex.IsMatch(input)) return true;
return false;
}
答案 1 :(得分:1)
试试这个正则表达式(您的意思是在允许的字符描述中包含-
吗?):
Regex("^[A-Z0-9.$/+% -]*$")
答案 2 :(得分:0)
您的正则表达式只匹配一个不是任何字符的字符。你的正则表达式应该是:
^[A-Z0-9\.$/+% ]+$
另外,使用非反转功能进行检查:
public static bool IsValid(string input)
{
if (regex.IsMatch(input)) return true;
return false;
}