web-dev-qa-db-ja.com

パスワードには少なくとも1つの非英字が必要です

パスワードの正規表現が必要です。パスワードには少なくとも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
7
cashmere

正規表現パターンを使用する^(?=.{8})(?=.*[^a-zA-Z])


説明:

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

最大長も制限したい場合(16としましょう)の場合、正規表現パターンを使用します。

^(?=.{8,16}$)(?=.*[^a-zA-Z])
25
Ωmega

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

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

if(string.Length > 7)
2
J V

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

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.
1
Johnny

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.")]
0
cyclical