JavaScriptでパスワードを検証する方法|バリデーション関数の実装例
本記事では、パスワード文字列を唯一の引数として受け取り、その妥当性を判定するJavaScript関数の作成方法を解説します。ユーザー登録フォームなどで「一定のセキュリティ基準を満たしたパスワードかどうか」をプログラムでチェックしたい場合に役立つ内容です。
作成する関数は、渡されたパスワード文字列が以下のすべての条件を満たす場合に true を返します。
文字数: 6文字以上20文字以下であること
数字: 数字(0〜9)を少なくとも1つ含むこと
英小文字: 小文字のアルファベットを少なくとも1つ含むこと
英大文字: 大文字のアルファベットを少なくとも1つ含むこと
特殊文字: 特殊文字(
!@#$%^&*()-+のいずれか)を少なくとも1つ含むこと
コード例
実際のコードは以下のとおりです。
const valid = '12Aatab@';
const invalid = '1234ASD+';
const validatePassword = (str = '') => {
const { length: l } = str;
const strArr = str.split('');
if(l < 6 || l > 20){
return false;
};
const specialCharacters = '!@#$%^&*()-+';
const alphabets = 'abcdefghijklmnopqrstuvwxyz';
const numbers = '0123456789';
const checkWith = (char, set) => set.includes(char);
const containsSpecialCharacter = strArr.some(char => checkWith(char, specialCharacters));
const containsLowercase = strArr.some(char => checkWith(char, alphabets));
const containsUppercase = strArr.some(char => checkWith(char, alphabets.toUpperCase()));
const containsNumber = strArr.some(char => checkWith(char, numbers));
return containsSpecialCharacter && containsLowercase && containsUppercase && containsNumber;
};
console.log(validatePassword(valid));
console.log(validatePassword(invalid));
コードの解説
この関数の処理の流れは次のとおりです。
str.split('')で文字列を1文字ずつの配列に分解し、各文字を個別にチェックできるようにします。まず文字列の長さを確認し、6文字未満または21文字以上の場合はその時点で
falseを返して処理を終了します。Array.prototype.some()メソッドを使い、配列内に各条件セット(特殊文字・英小文字・英大文字・数字)に該当する文字が「1つでも存在するか」を順番に判定します。checkWith()関数はincludes()による包含判定を共通化したヘルパー関数です。最後に、4つの判定結果を論理AND(
&&)で結合し、すべての条件を満たしていればtrue、1つでも欠けていればfalseを返します。
出力結果
コンソールには次のように出力されます。
true false
「12Aatab@」は文字数・数字・英大小文字・特殊文字のすべての条件を満たしているため true となります。一方、「1234ASD+」は英小文字が含まれていないため false と判定されます。
このように、文字列操作と配列メソッドを組み合わせることで、正規表現を使わずに柔軟なパスワードバリデーションを実装できます。要件に応じて文字数の範囲や許可する特殊文字を変更すれば、さまざまなサービスの仕様に合わせて応用可能です。
-
JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方
JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時
-
JavaScriptのimportで波括弧「{}」を使う理由とは?名前付きエクスポートの基本をわかりやすく解説
JavaScript(ESモジュール)でモジュールを読み込む際、import 文に波括弧 { } を付けるかどうか迷ったことはありませんか?実はこの波括弧は、名前付きエクスポート(named export)を読み込むために必要な記法です。本記事では、実際のコード例を使いながら、{ } の役割と使い方を詳しく解説します。 importで { } を使う場面とは JavaScriptのESモジュールでは、エクスポート方法によって読み込み側の書き方が変わります。 名前付きエクスポート:export { 関数名 } のようにエクスポートされたものを読み込む場合は、import { 名前 } fro