-4

重複の可能性:
パスワード検証正規表現

以下のポリシーを使用して、JavaScriptでパスワードの検証を行う必要があります。このための正規表現を教えてください。私は正規表現にまったく慣れていません。

  • パスワードは8〜18文字の長さである必要があり、パスワードは次の条件の少なくとも3つを満たす必要があります。
  • パスワードには少なくとも1つの小文字(az)を含める必要があります
  • パスワードには少なくとも1つの大文字(az)を含める必要があります
  • パスワードには少なくとも1つの数値(0-9)が必要です
  • パスワードには特殊文字を使用する必要があります(つまり、@。--_#$%)

これを手伝ってください。この要件を満たすための条件を提供する方法を決定できません。

4

1 に答える 1

2

この答えは、1つの正規表現で実行することがどれほど読みにくいかを示すためだけのものです。コードを書くために、他のよりクリーンな代替案を検討してください。

1つの正規表現で実行できますが、恐ろしいです。

^(?:(?=.*[a-z])(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])|(?=.*[a-z])(?=.*[A-Z])(?=.*\d)|(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])|(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9\x00-\x1f])).{8,18}$

少し短くすることもできますが、それでも醜いです。

^(?:(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])(?:(?=.*[a-z])|(?=.*[A-Z]))|(?=.*[a-z])(?=.*[A-Z])(?:(?=.*\d)|(?=.*[^a-zA-Z0-9\x00-\x1f]))).{8,18}$

質問で述べたように、これらのフラグメントに対応する4つの追加条件があります。

  • (?=.*\d):数字の先読み(0-9)
  • (?=.*[a-z]):小文字の英語のアルファベット(az)を先読みする
  • (?=.*[A-Z]):大文字の英語のアルファベット(AZ)を先読みする
  • (?=.*[^a-zA-Z0-9\x00-\x1f]):数字と英語のアルファベット以外の文字を先読みしてください。制御文字も除外されます。

私の知る限り、正規表現には4つの条件のうち3つに一致すると言うメカニズムはありません。したがって、正規表現の大部分を占めるこれらすべての条件を列挙する必要があります。

.{8,18}任意の文字の8〜18に一致します。そして、正規表現全体がとで固定され^てい$ます。

于 2012-12-31T10:08:11.437 に答える