1

正規表現でいくつかの文字列をチェックしていますが、どういうわけか完璧ではありません。理由はわかりません。これらの文字のみを含む文字列を許可したいと思います。

  • AからZ
  • 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

あなたの正規表現は、それらの文字のいずれでもない1つの文字のみに一致しています。正規表現は次のようになります。

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

また、チェックには非反転関数を使用してください。

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