2017-04-03 7 views
1

パスワードチェッカーの問題を解決しようとしていますが、私は1つの文字列が2つの式に一致する段階に入っています。RegExマッチグループを使用している間に文字列の長さを確認する方法

ルール:文字列が12文字未満の場合は「大丈夫」6文字未満

  • リターンである任意の文字列のための「短すぎる」

    • リターン、一つ以上のアンダースコアを備え、または番号、または小文字/大文字
      var str = 'aBB33' 
      
      var lessthansixRegex = new RegExp(/^(?=.*?[a-z])(?=.*?[A-Z])|(?=.*?\d{1}){0,6}$/); 
      
      var okayRegex = new RegExp(/(?=.*?[a-z])(?=.*?[A-Z])|(?=.*?\d{1})|(?=.*?[_]{1})/); 
      
      if (okayRegex.test(str) && str.length < 12) { 
          return 'okay'; 
      } else if (tooshortRegex.test(str) && str.length < 6) { 
          return 'too short'; 
      } 
      

    のミックスでは、cのPARAMATERSこれをチェックしたりしている方法はあります廊下が台無しになった。

    」の不足は簡単に見つかるかもしれませんが、「大丈夫」正規表現では、そのパラメータを '|'一致する必要のある文字列が他にもあり、 ''も含まれていないためです。

    他のバグを見つけたら教えてください。

    ありがとうございます!

  • +0

    私はちょうどRegExに慣れてきたので、RegExを使用して文字列の長さをチェックすることをお勧めします。奇妙なことですが、string.lengthプロパティのみを使用すると、「大丈夫」正規表現はまだ一致しています。 – user6456392

    +0

    Hmmm ...先読みは古典的な^(パターン)$(これに到着する前にいくつかの方法を試しました)よりも多くのテストに合格しているようです – user6456392

    答えて

    1

    ような何かを行うことによって、それぞれの条件に基づいて、特定のエラーメッセージを提供し、その理由だけではなく、文字列の長さを確認することができませんそれのための正規表現を書くよりも?また、私はあなたの正規表現は単純かもしれないと思う:

    [_\d]   // match any underscore or digit (number) 
    |    // or (checks whether what's before or after is true) 
    [A-Z]+.*[a-z]+ // check for at least one A-Z followed by any gap 
           // of characters followed by at least one a-z 
    |    // or 
    [a-z]+.*[A-Z]+ // reverse of last check (lower then upper) 
    

    役に立てば幸い:これは正規表現についてですよう

    var str = 'aBB33'; 
    
    var okayRegex = /[_\d]|[A-Z]+.*[a-z]+|[a-z]+.*[A-Z]+/; 
    
    if (str.length < 6 || str.length > 11) { 
        return 'password must be between 6 & 11 characters'; 
    } else if (okayRegex.test(str)) { 
        return 'ok'; 
    } else { 
        return 'invalid password'; 
    } 
    

    を見て、私は何が起こっているかを説明しましょう!

    +0

    ありがとう!私はRegExに慣れてきているので、可能な限り多くのことを使って課題を解決しようとすると便利だと思いました。私は間違いなくプロダクションコードでそれを使用しません。また、文字列は長さだけでなく、いくつかのものを検証する必要があります。説明と、特に大文字/小文字のパターンのバージョンのおかげで - 私はそれに苦労してきた、あなたのパターンは覚えやすいようです。 – user6456392

    +0

    もう一度おねがいします。あなたのソリューションと以下のソリューションを組み合わせて、すべてのテストケースを解決することができました。問題の考え方を変えてくれてありがとう。 – user6456392

    1

    あなたの正規表現は複雑すぎるようです。あなたは、個々の正規表現に対してテストして、解に到達し、私はあなたがここにovercomplicated事をしたと思う。この

    var containsNumber = new RegExp('\d'); 
    var containsUnderscore = new RegExp('[_]'); 
    var containsUpperCase = new RegExp('[A-Z]'); 
    var containslowerCase = new RegExp('[a-z]');  
    
        if (str.length < 6 || str.length > 11) { 
        return 'password must be between 6 & 11 characters'; 
    } else if (!containsNumber.test(str)) { 
        return 'password must contain a number'; 
    }else if (!containsUnderscore.test(str)) { 
        return 'password must contain underscore'; 
    }else if (!containsUpperCase.test(str)) { 
        return 'password must contain upper case character'; 
    }else if (!containslowerCase.test(str)) { 
        return 'password must contain lower case character'; 
    } 
    
    +0

    興味深いことに...あなたのパターンは問題をアラートとして扱いますユーザー。課題は視覚的な手がかりとして実際に解決策を突っ込んでいるので、パターンが一致するかどうかを示します。チッピングをお寄せいただきありがとうございます。それはパターンを扱う別の方法を見て非常に便利でした。私は、パターンをより小さな塊に縮小しようと挑戦しています。 – user6456392

    +1

    もう一度おねがいします。あなたのソリューションと上記のソリューションを組み合わせて、すべてのテストケースを解決することができました。問題の考え方を変えてくれてありがとう。 – user6456392

    関連する問題