ホームページ >バックエンド開発 >Golang >正規表現をバックトラックせずに Go でパスワードを検証する方法は?

正規表現をバックトラックせずに Go でパスワードを検証する方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 16:55:29941ブラウズ

How to Validate Passwords in Go Without Backtracking Regular Expressions?

Go の正規表現によるパスワード検証

正規表現を使用したパスワードの検証は一般的なタスクですが、Go の標準で提供される正規表現パッケージAPI は他の言語とは異なります。したがって、正規表現を使用してパスワード検証関数を構築しようとすると、いくつかの固有の課題に遭遇する可能性があります。

パスワード ルール

提供されたパスワード ルールには次のものが必要です。そのパスワード:

  • 少なくとも 7 文字で構成されます。
  • 少なくとも 1 つの数字が含まれます。
  • 少なくとも 1 つの大文字が含まれます。
  • 少なくとも 1 つの特殊文字を使用してください。

正規表現の制限

残念ながら、Go で 1 つの正規表現を使用してこれらのルールをすべて実装するのは難しいことに注意することが重要です。実現不可能です。これは、Go の正規表現がバックトラッキングをサポートしていないためです。これは、パスワード文字列内に文字が存在し、カウントされていることを確認するために必要です。

代替アプローチ

これらを考慮すると、制限があるため、別のアプローチが必要です。 1 つのオプションは、一連のチェックを使用してこれらのルールを検証するカスタム関数を作成することです。

<code class="go">func verifyPassword(s string) (sevenOrMore, number, upper, special bool) {
    letters := 0
    for _, c := range s {
        switch {
        case unicode.IsNumber(c):
            number = true
        case unicode.IsUpper(c):
            upper = true
            letters++
        case unicode.IsPunct(c) || unicode.IsSymbol(c):
            special = true
        case unicode.IsLetter(c) || c == ' ':
            letters++
        default:
            // Handle the case if there are invalid characters.
        }
    }
    sevenOrMore = letters >= 7
    return
}</code>

この関数は、パスワード文字列を反復処理して、文字、数字、大文字、および特殊文字の存在をチェックします。 。各条件が満たされたかどうかを示すブール値を返します。これらのチェックを組み合わせることで、正規表現に依存せずにパスワード検証ルールを効果的に実装できます。

以上が正規表現をバックトラックせずに Go でパスワードを検証する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。