0

以下の 2 つの正規表現を組み合わせることができません。パスワードの標準要件:

  • パスワードには、連続する 2 文字を超えるユーザー名または氏名の一部を含めることはできません
  • パスワードの長さは 6 文字以上にする必要があります
  • パスワードには、次のカテゴリの 3 つの文字を含める必要があります
    • 大文字 (英語AZ)
    • 小文字 (英語 az)
    • 基数 10 の数字 (0 ~ 9)
    • アルファベット以外の文字 (!、@、#、$、% など)

表現:

passwordStrengthRegularExpression="((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})"

パスワードには、「テスト」または「テスト」という単語、または単語の変形を含めることはできません

passwordStrengthRegularExpression="((?=.*\"^((?!Test|test|TEST).*)$"

どちらも個別に問題なく動作しています。

4

2 に答える 2

2

Because your second regexp primarily uses a negative lookahead, you can remodel that slightly and stick it right at the beginning of the other expression. First, I'm going to change your second regex to:

"(?!.*(?:Test|test|TEST))"

In english, the string may not contain any number of (or zero) characters followed by test.

Then, I'm going to stick that right at the beginning of your other expression

passwordStrengthRegularExpression="^(?!.*(?:Test|test|TEST))(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}$"

Finally, I'm going to show you how to make only one part of a regex case-insensitive. This may or may not be supported depending on what program this is actually for.

passwordStrengthRegularExpression="^(?!.*(?i:test))(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}$"

See the (?i:...)? That means that the flags between the ? and the : are applied only to that part of the expression, that is, only that area is case-insensitive.

于 2013-07-31T13:08:38.153 に答える