2017-02-27 3 views
2

フォームフィールドに検証を追加しようとしているので、特定の単語が含まれているとエラーが表示されます。現時点では私はこれを持っている:C#で大文字と小文字を区別しないフォームフィールドの検証を追加するには?

Validation.Add("field-1", Validator.Regex("^((?!TEST)(?!test).)*$", "Field may not contain 'test'")); 

これは「TEST」と「テスト」のために正常に動作し、誰かに入る「test」を防ぐことはできません。

私は大文字小文字を区別しないフラグを追加しようとしたが、これは完全に働いて正規表現の停止をした:

Validation.Add("field-1", Validator.Regex("/^((?!TEST)(?!test).)*$/i", "Field may not contain 'test'")); 

私も(私?)ケースを無視するために使用することができhere、それのdidn」を読んでトンの仕事はどちらか - 多分私は間違った場所にそれを入れている:

Validation.Add("field-1", Validator.Regex("^((?i)(?!TEST)(?!test).)*$", "Field may not contain 'test'")); 

は、「テスト」のすべての可能なバリエーションを追加することなく、このなんとかですか?

+1

'"(?i)^(?!。* TEST)。* $ "'を試してください。 )* $ "'](http://regexstorm.net/tester?p=%5e%28%28%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%) + 29%28%3f!テスト29%28%3f!テスト29%29%29 *%24&i =ここには+ a + tESt +があります)(ただし、ここでの貪欲なトークンは " ")。 –

+0

それには運がありません。 (?i)のバリエーションのように見えますが、すべてを殺します。 – Andy

+1

これはクライアント側でこれを実行するという意味ですか? '(?i)'はJSでは動作しませんが、.NETでのみ動作します(他の正規表現のフレーバでも同様です)。 –

答えて

1

あなたの正規表現はクライアント側で処理されているようです。唯一の方法アウトが文字クラスを使用して、すべての文字の例を綴ることですので、JavaScriptのRegExpは、(?i)インライン修飾子(それがどんなインライン修飾子をサポートしていません、でもXRegExpライブラリー)をサポートしていません:

Validation.Add("field-1", Validator.Regex("^(?!.*[Tt][Ee][sS][tT]).*$", "Field may not contain 'test'")); 

注意を自分のこと貪欲なトークンがリソースを消費しすぎるパターンである場合、ここで単純なネガティブな先読みを使用する方が簡単です。複数行の文字列をサポートする必要がある場合は、.[\s\S]文字クラスに置き換えます。

詳細

  • ^ - 文字列
  • (?!.*[Tt][Ee][sS][tT])の開始 - 任意の0+文字
  • .*後など、任意のTestまたはTesTそこにはできません - 任意の0+文字、できるだけ多く
  • $ - 文字列の最後。
4

パラメータを持つRegexクラスのインスタンスを使用します。

関連する問題