web-dev-qa-db-ja.com

パスワードの正規表現には、少なくとも8文字、少なくとも1つの数字、および大文字と小文字の両方、および特殊文字を含める必要があります。

それをチェックするための正規表現が欲しいのですが。

パスワードには、少なくとも1つの数字を含めて少なくとも8文字、大文字と小文字の両方、および特殊文字(#?!など)を含めることができます。

古いパスワードにしたり、ユーザー名、"password""websitename"を含めることはできません。

そして、これが私の検証式で、大文字1文字、小文字1文字、数字または特殊文字1文字を含む8文字です。

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

どのように私はそれを書くことができます パスワードは1つの大文字、1つの特殊文字および英数字を含む8文字でなければなりません

313

最低8文字、少なくとも1つの英字と1つの数字:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

最小8文字、少なくとも1文字、1数字、1特殊文字

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$"

最低8文字、少なくとも1つの大文字、1つの小文字、および1つの数字。

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

最低8文字、少なくとも1つの大文字、1つの小文字、1つの数字、および1つの特殊文字

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"

最小8文字、最大10文字、少なくとも1つの大文字、1つの小文字、1つの数字、および1つの特殊文字

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"
868
Srinivas

この正規表現は複数の 先読みアサーション(条件)と共に使用できます

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

この正規表現はこれらの規則を強制します:

  • 少なくとも1つの大文字 英字(?=.*?[A-Z])
  • 少なくとも1つの小文字の英字、(?=.*?[a-z])
  • 少なくとも1桁、(?=.*?[0-9])
  • 少なくとも1つの特殊文字、(?=.*?[#?!@$%^&*-])
  • 長さ最小8桁.{8,}(アンカー付き)
275
anubhava

正規表現はAND演算子を持っていないので、有効性が何かAND何か他のものAND何か他のものによって定義されている場合、有効なパスワードに一致する正規表現を書くのはかなり難しいです。

しかし、正規表現にはOR演算子があるので、DeMorganの定理を適用して、無効なパスワードと一致する正規表現を書くだけです。

8文字未満のもの _または_ 数字のないもの _または_ 大文字のないもの _または_ または小文字のないもの _または_ /なしのもの特殊文字.

そう:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

それに一致するものがあれば、それは無効なパスワードです。

51
Matt Timmermans

@ anubhavaの答えを少し改善しました。特殊文字はキーボード内のものに限定されているので、これを特殊文字に使用します。

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

この正規表現はこれらの規則を強制します:

  • 少なくとも1つの大文字の英字
  • 少なくとも1つの小文字の英字
  • 少なくとも1桁
  • 少なくとも1つの特殊文字
  • 長さ少なくとも8
29
Edwin Beltran

私は自分の状況のた​​めに最も人気のある答えをたどるのにいくらか困難を感じました。例えば、私の検証は;[のような文字では失敗しました。私は特殊文字をホワイトリストに載せることには興味がなかったので、代わりにテストとして[^\w\s]を活用しました。単純に置くと、Word以外の文字(数字を含む)および空白以外の文字に一致します。要約すると、これが私のために働いたものです...

  • 少なくとも8文字
  • 1以上の数字
  • 少なくとも1小文字
  • 少なくとも1大文字
  • 少なくとも1特殊文字

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSFiddle Link - さまざまなケースをカバーする簡単なデモ

20
scniro

JavaScriptファイルjquery.validate.min.jsをインポートします。

このメソッドを使うことができます:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. 少なくとも1つの大文字の英字
  2. 少なくとも1つの小文字の英字
  3. 少なくとも1桁
  4. 少なくとも1つの特殊文字
12
Vikram

より一般的なバージョン(?)。 特殊文字 として英語以外の文字を使用できます。

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$
var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
  
  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });
12
SamWhan

これを試してください。

  1. 6文字以上
  2. 少なくとも1つの大文字
  3. 少なくとも1つの小文字
  4. 少なくとも1つの特殊文字

式:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

オプションの特殊文字:

  1. 少なくとも1つの特殊文字
  2. 少なくとも1つの番号
  3. 特殊文字はオプションです
  4. 最小6文字、最大16文字

式:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

最小値と最大値の条件が必要ない場合は.{6, 16}を削除してください

  • 6 は最小文字数制限
  • 20 は最大文字数の制限
  • ?= は一致表現を意味します
9
ojus kulkarni
Use the following Regex to satisfy the below conditions:

Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.

Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/    
6
SHASHANK HONRAO

私はPeter Mortensenに返信しますが、私は十分な評判を得ていません。

彼の表現は、指定されたそれぞれの最小要件に最適です。特殊文字を必要としない彼の表現の問題は、それらが特殊文字も許可していないということです、それで彼らはまた最大の要求を強制します。通常は、ユーザーが自分のパスワードを自分の望むほど強力にすることを許可します。なぜ強力なパスワードを制限するのですか?

それで、彼の「最低8文字、少なくとも1文字と1数字」という表現:

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

最小要件を満たしていますが、残りの文字は のみ 文字と数字にすることができます。特殊文字を許可する(ただし必須ではない)には、次のようにします。

任意の文字を許可する^(?=.*[A-Za-z])(?=.*\d).{8,}$

または

特定の特殊文字を許可する^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$

同様に、「最低8文字、少なくとも1つの大文字、1つの小文字、および1つの数字:」

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

その最小要件を満たしていますが、 only は文字と数字を許可します。つかいます:

任意の文字を許可する^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$

または

特定の特殊文字を許可する^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}

5
deathwombat

直接質問に答えないでください、しかしそれは本当に正規表現である必要がありますか?

私はPerlをたくさんやっていて、正規表現に関する問題を解決することに慣れていました。しかしながら、それらがすべての先見の明と他の癖でより複雑になるとき、あなたはそれらすべての小さなバグを殺すために何十ものユニットテストを書く必要があります。

さらに、正規表現は通常、必須または機能的なソリューションよりも数倍遅くなります。

たとえば、次の(あまりFPではない)Scala関数は、最も一般的な回答の正規表現よりも約3倍高速に元の質問を解決します。それがすることはあなたがまったく単体テストを必要としないこともとても明白です:

def validatePassword(password: String): Boolean = {
  if (password.length < 8)
    return false

  var lower = false
  var upper = false
  var numbers = false
  var special = false

  password.foreach { c =>
    if (c.isDigit)       numbers = true
    else if (c.isLower)  lower = true
    else if (c.isUpper)  upper = true
    else                 special = true
  }

  lower && upper && numbers && special
}
4

あなたの必要性に従ってこのパターンはちょうどうまくいくはずです。これを試して、

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

文字列変数を作成し、パターンを割り当て、パターンが正しい場合はtrue、そうでない場合はfalseを返すブールメソッドを作成します。

サンプル:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"

private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}
3
Arun Sivanandan

私はここで多くの問題を発見したので、私は自分で作りました。

ここでそれはテストで、それはすべて栄光です。

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/DCRR65/4/tests

気をつけるべきこと:

  1. 私がテストしている\wが含まれているので、_は使用しません。
  2. 行末と一致せずに、シンボルを一致させるのに多くの問題がありました。
  3. シンボルを具体的に指定していません。これは、ロケールによってロケールによってキーボードのシンボルが異なる場合があるためです。
2
Stefano
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
2
shiyani suresh

@ClasGはすでに を推奨しています

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

ただし、_(アンダースコア)を特殊文字として使用することはできません(例:Aa12345_)。

改良されたものがあります:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$
2
SONewbiee

以下の正規表現を使用して、以下の条件を満たしてください。

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

正規表現:^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$

オンラインでテストすることができます: https://regex101.com

1
Samrat Saha

HTML5を使用してこれを実現できます。

以下のコードをパターン属性に使用します。

pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

それは完璧に機能します。

1
Vidya

以下の正規表現パターンを使用して、パスワードが予想と一致するかどうかを確認できます。

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})
1

これを試して:

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

この正規表現は私にとっては完璧に機能します。

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}
0
Kiwi Rupela

少なくとも1つの大文字、1つの数字、および任意の特殊文字と、8から63の間の長さに一致するパターン。

"^(?=。 [a-z])(?=。 [A-Z])(?=。*\d)[a-zA-Z\d\W] {8,63} $"

このパターンはJavaプログラミングに使用されました。

0
Anup Seth

私は実際に最初の答えをここにコピーして、より多くのx-convenient regexに変換しました。

これはexample-regexであり、それを必要とします

  1. 少なくとも8文字の長さ
  2. 少なくとも1つの小文字
  3. 少なくとも1つの大文字

IMPORTANT:この正規表現数字、$、#、!などの特殊文字など、他のすべての文字も除く-ルール1.〜3の場合。入力文字列に一致

^(?=.*[a-z])(?=.*[A-Z]).{8,}$

「。」に注意してください正規表現の最後のalomst。これは、ほぼすべての(および読み取り可能なすべての文字)に一致します

0

Java/Androidでは、少なくとも1つの数字、1つの文字、1つの特殊文字を使用して次のパターンでパスワードをテストします。

"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"
0
Dadaji
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

オンラインリンクチェック https://regex101.com/r/mqGurh/1

0
Tai Ho

以下のことを願っています。これをAzureのカスタムポリシーで試しました。

^(?=。 [az])(?=。 [AZ])(?=。 \d)(?=。 [@#$%^&* -_ + = [] {} | \: '、?/ ~&quot;();!])([A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/〜 "();!] |。(?!@)){6,16} $

0
Venkatesh