8

パスワードの正規表現が必要です。パスワードは 8 文字以上である必要があります。少なくとも 1 文字は、数字または特殊文字 (文字ではない) でなければなりません。

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
[RegularExpression(@"(?=.*\W)?(?=.*\d)", ErrorMessage = "Error message")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

長さの検証がありますが、パスワードに少なくとも 1 つの数字または特殊文字が含まれているかどうかを確認する正規表現についてサポートが必要です。

有効なパスワードの例:

testtest85*
testtes*
testtes1
test1234*+

無効なパスワードの例:

testtest
testabc
4

6 に答える 6

28

Use regex pattern ^(?=.{8})(?=.*[^a-zA-Z])


Explanation:

^(?=.{8})(?=.*[^a-zA-Z])
│└──┬───┘└──────┬──────┘
│   │           │
│   │           └ string contains some non-letter character
│   │
│   └ string contains at least 8 characters
│
└ begining of line/string

If you want to limit also maximum length (let's say 16), then use regex pattern:

^(?=.{8,16}$)(?=.*[^a-zA-Z])
于 2012-08-21T14:21:17.000 に答える
2

かなり単純な正規表現で実行します。[^a-zA-Z]

次に、長さを個別に確認します。

if(string.Length > 7)
于 2012-08-21T12:48:47.420 に答える
1

簡単な方法は次のようになります。

Match match1 = Regex.Match(<input_string>, @"(?=.{7})");   

match1.Successは、少なくとも8文字であることを保証します。

Match match2 = Regex.Match(<input_string>, [^a-zA-Z]);

match2.Successは、文字列内に少なくとも1つの特殊文字または数字が含まれていることを確認します。

So, match1.Success && match2.Success guarantees will get what you want.
于 2012-08-23T05:28:23.277 に答える
0

Omega の例を試してみましたが、私の C# コードでは機能しませんでした。代わりにこれを使用することをお勧めします。

[RegularExpression(@"^(?=[^\d_].*?\d)\w(\w|[!@#$%]){7,20}", ErrorMessage = @"Error. Password must have one capital, one special character and one numerical character. It can not start with a special character or a digit.")]
于 2015-03-26T15:31:24.407 に答える
-1

このような表現:

[a-zA-Z]*[0-9\+\*][a-zA-Z0-9\+\*]*

問題なく動作するはずです(明らかに、許可したい追加の特殊文字を挿入するか、文字/数字以外のものと一致させるために ^ 演算子を使用してください)。複雑なルックアラウンドを使用する必要はありません。このアプローチは、「安全」であることがわかっている特殊文字の特定のサブセットのみを許可し、他のすべてを許可しない場合に意味があります。

「安全でない」ことがわかっている特定の文字を除くすべての特殊文字を含めたい場合は、次のようなものを使用するのが理にかなっています。

\w[^\\]*[^a-zA-Z\\][^\\]*

この場合、パスワードでバックスラッシュを明示的に禁止し、それ以外の場合は少なくとも 1 つの英字以外の文字との任意の組み合わせを許可します。

上記の式は、文字と少なくとも 1 つの数字または +,* を含む任意の文字列に一致します。「長さ 8」の要件については、正規表現を使用して確認する理由はまったくありません。

于 2012-08-21T12:47:50.153 に答える
-1
  function randomPassword(length) {
        var chars = "abcdefghijklmnopqrstuvwxyz#$%ABCDEFGHIJKLMNOP1234567890";
        var pass = "";
        for (var x = 0; x < length; x++) {
            var i = Math.floor(Math.random() * chars.length);
            pass += chars.charAt(i);
        }
        var pattern = false;
        var passwordpattern = new RegExp("[^a-zA-Z0-9+]+[0-9+]+[A-Z+]+[a-z+]");
        pattern = passwordpattern.test(pass);
        if (pattern == true)
            { alert(pass); }
        else
         { randomPassword(length); }
    }

これを試して、少なくとも1つの特殊文字を含むランダムパスワードを作成してください

于 2017-01-05T08:06:26.137 に答える