1

我用我的正则表达式检查了一些字符串,但不知何故它并不完美。我不知道为什么。我想允许只有这些字符的字符串:

  • 从头到尾
  • 0 到 9
  • .
  • %
  • /
  • {空间}
  • +
  • $

所以我认为这个正则表达式应该足够了:

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. 是正确的,但这是错误的。我的正则表达式有什么问题?有任何想法吗?谢谢

4

3 回答 3

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;
    }
于 2012-11-05T12:58:21.893 回答
1

试试这个正则表达式(你的意思是-在你的允许字符的描述中包含?):

Regex("^[A-Z0-9.$/+% -]*$")
于 2012-11-05T13:07:08.567 回答
0

您的正则表达式仅匹配一个不是这些字符的字符。你的正则表达式应该是:

^[A-Z0-9\.$/+% ]+$

此外,使用非反转函数进行检查:

public static bool IsValid(string input)
{
    if (regex.IsMatch(input)) return true;
    return false;
}
于 2012-11-05T12:59:01.270 回答