-3

次の基準で文字列を検証できる正規表現が必要です。

  • 文字列は大文字のみで構成する必要があります。
  • 最小で6文字、最大で20文字が含まれている必要があります。
  • サブストリングで始まる必要があります-ROLE(大文字のみ)の後にROLE_のようなアンダースコア文字が続きます
  • アンダースコア文字は、文字列の最後(先頭にも)に表示されないようにする必要があります。
  • 残りの文字は、大文字とROLE_ADMIN、ROLE_USER、ROLE_AGENT_USERのようなアンダースコアの組み合わせのみにする必要があります。
  • 2つ以上の連続したアンダースコアは禁止する必要があります。

私は正規表現についてほとんど知らないので、これまで私が試みた例はほとんど受け入れられず、ここで提示する必要はまったくないと感じています。

4

3 に答える 3

3

これが私の正規表現です。

(?!.*__.*)(?!.*_$)(ROLE_[A-Z_]{1,15})

これが何をするかです:

  • 前の部分は、否定先読みと呼ばれます。 連続するアンダースコアが 2 つ以上ある場合、または末尾に 1 つある場合、文字列は拒否されます。
  • 次のグループは、そのままの文字列に一致しROLE_、次にその他の任意の文字 A から Z およびアンダースコアに、少なくとも 1 回、ただし 15 回以下で一致します。これにより、ストリング全体の長さを 20 以下に抑えます。

Debuggex での表示は次のとおりです。

于 2013-03-22T03:47:48.353 に答える
3

IMO、正規表現で文字列の長さをチェックすると複雑になりますが、次を使用できます。

^ROLE_(([A-Z]+_)*[A-Z]+)(?<!.{21})$

(?<!.{21})長さが20を超える場合、基本的に文字列を拒否します

これはRubularのデモです。


正規表現フレーバーが否定後読みをサポートしていない場合は、次を使用できます

^(?!.{21,})ROLE_(([A-Z]+_)*[A-Z]+)$

(?!.{21,})と同じことを(?<!.{21})行いますが、最初に長さをチェックします。

これはRubularのデモです。

于 2013-03-22T04:03:37.670 に答える
-1

これでうまくいくはずです:

ROLE(_[A-Z]+)+

これは最大長を制限しませんが、これが最も近いと思います。

于 2013-03-22T03:37:31.357 に答える