2

許可されていない特殊文字のリストからテキストボックスを検証する必要があります。これはすべて許可された文字ではありません。

"&";"\";"/";"!";"%";"#";"^";"(";")";"?";"|";"~";"+";" ";
                                                   "{";"}";"*";",";"[";"]";"$";";";":";"=";"

セミカラムを使用して文字を区切る場合。一部の文字の正規表現を記述して、機能したかどうかを検証しようとしました。拡張します。機能していません。私がこれで間違っていること。

Regex.IsMatch(textBox1.Text, @"^[\%\/\\\&\?\,\'\;\:\!\-]+$")
4

5 に答える 5

4
^[\%\/\\\&\?\,\'\;\:\!\-]+$

完全に特殊文字で構成される文字列に一致します。特殊文字を含まない文字列と一致するように、文字クラスを反転する必要があります。

^[^\%\/\\\&\?\,\'\;\:\!\-]+$
  ^--- added

または、この正規表現を使用して、英数字、ハイフン、アンダースコア、およびアポストロフィのみを含む任意の文字列に一致させることができます。

^[a-zA-Z0-9\-'_]$

コメントで言及する正規表現

[^a-zA-Z0-9-'_]

許可されている文字以外の任意の文字を含む文字列に一致します(ただし、ハイフンをエスケープする必要がある場合があります)。これは、条件を正しく逆にした場合にも機能します(一致しない文字列を受け入れます)。

于 2012-10-25T06:40:27.247 に答える
4

文字のリストのいずれかを探しているだけの場合は、正規表現がより複雑なオプションです。String.IndexOfAny文字の配列または-1のいずれかの最初のインデックスを返します。だからチェック:

if (input.IndexOfAny(theCharacetrers) != -1) {
  // Found one of them.
}

theCharacetrers以前にクラススコープで設定された場所:

private readonly char[] theCharacetrers = new [] {'&','\','/','!','%','#','^',... };
于 2012-10-25T07:28:25.393 に答える
2

パターンの最初から^を削除し、最後から$を削除する必要がありました。そうしないと、文字列を一致させるために、特殊文字で開始および終了する必要があります。

だから、代わりに

@"^[\%\/\\\&\?\,\'\;\:\!\-]+$"

そのはず

@"[\%\/\\\&\?\,\'\;\:\!\-]+"

文字列の開始と文字列の終了アンカーについて詳しくは、こちらをご覧ください。

于 2012-10-25T07:04:32.697 に答える
1

RegExpは、「特殊文字のみで構成される文字列です(開始/終了マーカー^$)があるためです。

文字列に文字が含まれていないかどうかを確認するだけ@"[\%\/\\\&\?\,\'\;\:\!\-]")で十分です。

また、ソース文字列に文字が含まれているかどうかを確認する必要がある場合は、 String.IndexOfAnyの方が適している場合があります。

于 2012-10-25T06:41:43.900 に答える
0

textchangeイベントでこれを使用してください

        //Regex regex = new Regex("([a-zA-Z0-9 ._@]+)");
        Regex regex = new Regex("^[a-zA-Z0-9_@(+).,-]+$");
        string alltxt = txtOthers.Text;//txtOthers is textboxes name;
        int k = alltxt.Length;
        for (int i = 0; i <= k - 1; i++)
        {

            string lastch = alltxt.Substring(i, 1);
            MatchCollection matches = regex.Matches(lastch);
            if (matches.Count > 0)
            {

            }
            else
            {

                txtOthers.Text = alltxt.Remove(i, 1);

                i = i - 1;
                alltxt = txtOthers.Text;
                k = alltxt.Length;
            }
            txtOthers.Select(txtOthers.TextLength, 0);
        }

シャラフ・ハメド

于 2014-02-24T06:02:58.087 に答える