以下の正規表現は次のように書かれています。大文字が必要です。私は、大文字はオプションであるが必須ではないと言われました。少なくとも1つの大文字を必要としないように、他のパラメータを変更せずにこの正規表現を書く方法はありますか?
/^(?:(?!([a-zA-Z0-9-().&@?""#,+""s/])11)[a-zA-Z0-9-().&@?""#,+""s/]){7,}$/
回答:
回答№1は4その正規表現にはすでに大文字。それが主張する唯一の「面白い」事柄は、同じことを3回繰り返すことができず(同じ文字であること)、全体の文字列が少なくとも7文字以上必要であることです。
また、正規表現内の一重引用符文字や二重引用符文字の倍増は必要ありません。
回答№2の場合は3
その正規表現に大文字を必要とするものは何もありません。その正規表現によって課される要件は次のとおりです。
- 少なくとも7文字以上。
- 大文字と小文字のみ、0〜9の数字、記号
-().&@?"#,+"
、空白、または/
. - 行内の同じ文字のうちの3文字で始まらない。 (おそらく著者はこのチェックをパスワード全体に適用することを意図していましたが、それはできません)。
私が間違っていないと、これはパスワードの検証に使われているようです。これはいくつかの理由でregexesの使い方が悪いです。
正規表現が何をしているのか、実際に文字の大混乱は実際に何をしているのですか?あなたが正規表現の専門家でなければ、それは気にしません。
小切手がいくつかのコード行に分割されていると、読みやすく、メンテナンス性が向上します。
if (password.length < 7) reject("Too short."); if (numRepeatedCharacters(password) >= 3) reject("Too repetitive."); if (numDigits(password) < 1) reject("Digit required."); if (numSymbols(password) < 1) reject("Symbol required."); // etc.
それには文字のホワイトリストが含まれています。ブラックリスト。あなたがアスタリスク、パーセント記号、アクセント記号付きの文字などを使用したい場合、あなたはこれらの文字を拒否します良いセキュリティ上の理由。