0

テキストボックス内のテキストに対してパターンマッチングを行う必要があります。C#でサーバーのポストバックイベントでやっていました。私の正規表現は次のとおりです。

 public bool ValidatePassword(string temp)
    {
        bool isMatch = false;
        passwd = passwd.Trim();

        isMatch = Regex.IsMatch(temp,
                             @"^           # Start of string
                        (?=.*\p{Lu})      # Assert at least one uppercase letter
                        (?=.*\p{Ll})      # Assert at least one lowercase letter
                        (?=.*\d)          # Assert at least one digit
                        (?=.*[^\p{L}\d])  # Assert at least one other character
                        .{8,13}           # Match at least 8 characters and maximum of 13 characters
                        $                 # End of string",
                             RegexOptions.IgnorePatternWhitespace);


        return isMatch;
    }

これを Javascript に移行して、クライアント側でマッチングを行いたいと考えています。この関数をJavascriptに移行するのを手伝ってくれる人はいますか?

4

3 に答える 3

1

JavaScriptの正規表現の実装はラテン文字の場合のみを理解し、国別文字のセマンティクスを実装しないため、残念ながら、この正規表現を翻訳する方法はありません。原点に近い場所でも...

これを学習演習として行っている場合は、おそらく、正規表現のPerl実装を見て、そのコピーを入手することができます。しかし、あなたの質問がより実用的な領域にある場合は、ターゲットオーディエンスと彼らが入力する可能性のある言語を検討し、文字セット内の小文字/大文字のUnicodeコードポイントを調べてそれに応じて行動します。また、ラテン語以外の多くの言語には大文字と小文字の概念がないことに注意してください。

または、おそらく、パスワードのより厳しいルールを検討してください。:)

于 2012-09-23T10:06:24.880 に答える
1

何かのようなもの:

function ValidatePassword(temp) {
  return /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,13}$/.test(temp);
}
于 2012-09-23T07:54:54.097 に答える
0

\p{…}Javascript では文字クラスがサポートされていないため、大文字と小文字を一致させることはそれほど簡単ではありません。これを正規表現の外でテストすることをお勧めします。また、「他の文字」を定義するのは難しい[^a-z0-9]です。ところで、暗号化されたパスワードよりも長いパスワードを強制する必要があります。

function validatePassword(temp) {
    // temp = temp.trim() - is not supported in all browsers or needs to be shimmed
    //                      will be done in the regex

    if (temp.toUpperCase() == temp) // no lowercase char
        return false;
    if (temp.toLowerCase() == temp) // no uppercase char
        return false;

    return temp.test(/^\s*(?=.*\d).{8,13}\s*$/);
}
于 2012-09-23T10:00:53.903 に答える