パスワードの正規表現です。特殊文字制限

パスワードの正規表現です。特殊文字制限

AWSクラウド形成テンプレートにいくつかのパスワードエントリを入力しようとしています。パスワードを英数字と特殊文字のサブセットに制限します。私は以下を試しました:

"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#@$?]).{8,}$"

これは、少なくとも1つの小文字と大文字、1つの数字が必要であることを示します。また、特殊文字セットを以下に制限します。[#@$?]

私はすべての特殊文字(最後の文字の場合)が許可されていることを観察しました。予想通り他の場所では禁止

だからHello*E1許可されていませんが、HelloE1*許可されています。

[#@$?]表示される場所に関係なく、すべての特殊文字を無効にする方法は?

また、特殊文字セット全体を無効にするにはどうすればよいですか?"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$役に立ちません。これにより、すべての特殊文字が許可されます。

助けてくれてありがとう。

ベストアンサー1

正規表現:

^(?=[a-zA-Z0-9#@$?]{8,}$)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9]).*

説明する:

提供された正規表現では、プレビューは文字列が特定の条件を満たすことを確認するために使用されますが、不要な文字列をブロックする実際のフィルタではありません。次の条件を指定しました。

  • (?=.*?[A-Z]): 1 つ以上の大文字と一致します。
  • (?=.*?[a-z]):1つ以上の小文字と一致します。
  • (?=.*?[0-9]):1つ以上の数字と一致します。
  • (?=.*?[#@$?]): 以下の文字のうち 1 つ以上と一致します。#@$?
  • .{8,}:任意の文字を8回以上一致させます。

しかし、少なくとも2つの欠陥があります。

  • この(?=.*?[#@$?])特殊文字は必須ではない選択なので、不要な部分です[1]。

  • 前に述べたように、実際のフィルタを指定していないので、その部分のため.{8,}に、正規表現は、望ましくない特殊文字が含まれていても、プレビューによって設定された条件を満たす限り、すべての文字列を受け入れます[1]。

したがって、これらの欠陥を解決するには、次のものが必要です。

  • この(?=.*?[#@$?])セクションを削除してください。

  • 上記のフィルタとして機能する新しいプレビューを追加します。

このフィルタを構築するには、「どの文字を許可しないのですか?」ではなく、「どの文字を許可するのですか?」を考える必要があります。なぜなら、この特定のケースは扱いやすくなるからです。a-zA-Zおよび文字0-9のみを許可したいと言う場合、プレビューは#@$?次のようになります。

(?=[a-zA-Z0-9#@$?])

ただし、このステップでは最小長を設定し、プレビューに開始位置と停止位置(この場合は文字列の開始と終了)を知らせることもできます。

(?=[a-zA-Z0-9#@$?]{8,}$)

ここではすでにすべてのものの先頭にあるので省略しているので、^重複する必要はありません。すべての予測をまとめて設定し、次のコマンドを使用して.*有効なパスワードを一致させるだけです.{8,}

^(?=[a-zA-Z0-9#@$?]{8,}$)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9]).*

メモ:

  1. あなたが提供した正規表現と例では、その理由はよくわかりません。 1)#@$?必須とは見なされません。 2) 不要な文字は文字列の末尾でのみ許可され、他の場所では許可されません。おそらく、これはAWSで使用されている正規表現エンジンに関連しているでしょう。なぜなら、私が直接テストしたとき、すべてが期待どおりに機能していたからです。

おすすめ記事