2016-09-21 10 views
-3

は私がはJavascriptがパスワードのコンプライアンス

  1. パスワードは少なくとも8含まれている単語文字必要があり、これらの要件を満たすためにパスワードが必要
  2. 例えば、少なくとも1桁の数字を持っている必要があります
  3. 3は、少なくとも2つの大文字を持たなければならないではなく、1つの連続したシーケンス

に最も困難である。この

var pos = myPass.value.search(/^([\w.-]{8,})(?=.*\d)((.*?[A-Z]){2,})$/); 

3番で動作するように思われません。

+1

なぜこの質問はそれほど控えめですか?それは有効な質問ではありませんか?私は質問が非常に難しいと思う。 –

+0

「SOmething here1」に失敗しますか?私はそう思いますが、明確にしてください。 '/^(?=\D*\d)(?=(?:(?:^||^AZ]+)[AZ]){2}).{8,}$/.test(myPass。値) 'を返します。また、文字、数字、アンダースコア、ドット、ハイフンのみをマッチさせる場合は、/ ^(?= \ D * \ d)(?=(?:(^:[^ AZ] +)[AZ ]){2})[\ w .-] {8、} $ /。test(myPass.value) ' –

答えて

0

あなたがかかり、文字列はいくつかの制限パターンと一致するかどうかをだけチェックする必要がありながら、シーケンスと一致かかるパターンに限定する数量詞を追加するパターンを非消費し、混合されています。これらの制限を追加するには、lookaheadsが必要です。 (?=.*\d)正規表現の正しい部分ですが、他の部分はそうではありません。

また、​​は、文字列が一致するかどうかを確認するのに適した方法です。

使用

/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2}).{8,}$/.test(my‌​Pass.value) 

regex demo

を参照するか、パスワードで唯一の文字、数字、アンダースコア、ドット、ハイフンできるようにする:

/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2})[\w.-]{8,}$/.test(my‌​Pass.value) 
             ^^^^^^ 

詳細

  • ^ - 文字列
  • (?=\D*\d)の開始 - 文字列の先頭に0+非桁(\D*)の後に、(\d)の数字がなければならないが(この先読み実行後、正規表現インデックスはのままであることに注意してください文字列の先頭)
  • (?=(?:(?:^|[^A-Z]+)[A-Z]){2}) - の2つの系列((?:...){2})がなければならない: - 文字列の先頭または大文字
  • [A-Z]以外の1つの以上の文字 - アップ
    • (?:^|[^A-Z]+) percase letter。
  • .{8,} - 改行シーケンス
    OR
  • [\w.-]{8,}で使用されているもの以外の任意の8つの以上の文字 - 8以上のASCII文字と数字、アンダースコア、ドットやハイフン
  • $ - の終わり文字列。
関連する問題