RegExは、文字列に少なくとも1つの小文字、大文字、数字、記号が含まれていることを確認します


156

特定の文字列に次の各カテゴリの少なくとも1つの文字が含まれていることを確認するための正規表現とは何ですか。

  • 小文字
  • 大文字
  • シンボル

私は、すなわち、個々のセットのためのパターンを知って[a-z][A-Z]\d_|[^\w](私は彼らが修正だ、私はしませんでした?)。

しかし、文字列がこれらすべてを任意の順序で確実に含むようにするには、それらをどのように組み合わせますか?


どのプラットフォーム/正規表現方言ですか?Bartの答えは正しいですが、たとえばJavaScriptで先読みアサーションは信頼できません。
ボビンス、2009年

特にありません-私は正規表現を学んでいます。JavaScriptで使用できる代替手段はありますか?
Amarghosh 2009年

@bobinceねえ、先読みアサーションがJavascriptで信頼できない理由を見つけようとしています。これについての説明はありますか?
Chris Bier 2013年

@ChrisB:本当に混乱するIE / JScriptバグがあります:blog.stevenlevithan.com/archives/regex-lookahead-bug
bobince

回答:


349

単一の正規表現が必要な場合は、次を試してください:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)

簡単な説明:

(?=.*[a-z])        // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z])        // use positive look ahead to see if at least one upper case letter exists
(?=.*\d)           // use positive look ahead to see if at least one digit exists
(?=.*\W])        // use positive look ahead to see if at least one non-word character exists

そして、私はSilentGhostに同意し\Wます。これを次のような文字セットに置き換えます。[-+_!@#$%^&*.,?](もちろん、追加してもかまいません!)


最後.+をに変更するとどうなり.*ますか?で失敗するテストケースを思いつくことができませんでした.*。この文脈では同じですか?「ゼロ以上のキャラクター」は問題ないようです-確認を求めています。
Amarghosh 2009年

@Amarghosh:この場合、違いはありません。肯定的な先読みのため、文字列にはすでに少なくとも4文字が含まれています。したがって、変更.+.*たり、変更したりすることに違いはありません.{4,}
Bart Kiers、2009年

あなたが少し説明を追加しても構わないとしたら、これらの先読みの組み合わせが各文字セットの少なくとも1つが存在することを保証する方法を理解するのに苦労しています
Sharlike

@Sharlike、わかりやすくするために言い換える方法がわかりません。特にこれらの小さなコメントボックスで。これをお読みになることをお勧めします:regular-expressions.info/lookaround.html。それでも質問がある場合は、ご自分の質問を投稿してください。幸運を!
Bart Kiers、2013

4
@ikertxu、このようなことを試してください:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*[&%$]).{6,}$
Bart Kiers '21

20

バート・キアース、あなたの正規表現にはいくつかの問題があります。これを行う最善の方法は次のとおりです。

(.*[a-z].*)       // For lower cases
(.*[A-Z].*)       // For upper cases
(.*\d.*)          // For digits

このようにして、最初でも、最後でも、中央でも検索できます。あなたの持っている中で、私は複雑なパスワードで多くの問題を抱えています。


5
OPが要求したとおりにシンボルをチェックしていません。
カシミール2018年

5

これらの3つのグループを個別に照合し、それらすべてが存在することを確認できます。また、[^\w]少し広すぎるように見えますが、それが必要な場合は、に置き換えることをお勧めします\W


ありがとう。\ Wは知らなかった。調べたところ、Not Wordと一致することがわかりました。\ Wと[\ W]の間に違いはありますか?[\ W]は冗長ですか?
Amarghosh 2009年

@Amarghosh、はい、\W[\W]同じになります。
Bart Kiers、2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.