【TypeScript/JavaScript】アルファベットの大文字小文字、数字、記号のいずれか3つを含み、且つ、8文字以上

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【TypeScript/JavaScript】アルファベットの大文字小文字、数字、記号のいずれか3つを含み、且つ、8文字以上

2024-9-2 | ,

TypeScriptやJavaScriptでパスワードのポリシーでありがちな「アルファベットの大文字小文字、数字、記号のいずれか3つを含み、且つ、8文字以上」を判定したい!

概要

今回の記事では、TypeScriptやJavaScriptでパスワードのポリシーでありがちな「アルファベットの大文字小文字、数字、記号のいずれか3つを含み、且つ、8文字以上」を判定する手順を掲載する。

仕様書

環境

  • typescript 5.2.2

手順書

4種あるうちの3種を含むという判定があるので単純に正規表現だけでは判定できないので、それぞれの種類が含まれてるか判定してカウントする。

function isValidPassword(password: string): boolean {
    const hasLowercase = /[a-z]/.test(password);
    const hasUppercase = /[A-Z]/.test(password);
    const hasDigit = /\d/.test(password);
    const hasSymbol = /[!@#$%^&*()_+[\]{}|;:,.<>?]/.test(password);
    const categories = [hasLowercase, hasUppercase, hasDigit, hasSymbol];
    const categoryCount = categories.filter(Boolean).length;

    return categoryCount >= 3 || password.length >= 8;
};

記号なしで3種を含むという条件の場合は正規表現だけで判定できる。

function isValidPassword(password: string): boolean {
    return /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/.test(password);

まとめ(感想文)

記号も使うよね。