実例・全61件!Expressでバリデーションする「express-validator」さてさて、ここ数回は高速なサイトを構築する流れでNode.jsのExpressを使った開発方法を紹介しています。ExpressはLaravelと比べると、より必要なものだけに特化したフレームワークで「いたれりつくせり」のLaravelとはまた違った雰囲気があります。今回はその「標準搭載されてはいないもの」の中から、バリデーション機能(入力が正しい/間違ってるのチェック)の使い方を実例で紹介したいと思います。合わせて読みたいインストールするまずは、Expressでバリデーションが使えるようになるパッケージ「express-validator」をインストールしておきましょう。express-validator準備する「express-validator」を使うにはパッケージの読み込みとパラメータの設定が必要になります。以下のコードを適当な位置に追加してください。「express-validator」は以下のように、ルートに設定します。});});※check()の部分は.で繋いでいくつも追加できます。※また、check()は配列で好きなだけ追加することもできます。使ってます)にはたくさんのバリデーション・ルールが存在していますので、1つずつ見ていきましょう!※ただし、コードが長くなってしまうので、check()...の部分のみを紹介しています。実際の使い方は、基本的な使い方をご覧ください。空白ではないかどうか(必須項目)例えば、名前の入力を必須項目にする場合です。check('attribute_name').not().isEmpty();特定の文字列を含んでいるかどうか:contains()例えば、「テスト」という文字が入力内容に含まれているかどうかをチェックする場合です。check('attribute_name').contains('テスト')入力した2つの値が一致するかどうか例えば、「パスワード」と「パスワード(確認)」の内容が一致するかをチェックする場合です。Error('パスワード(確認)と一致しません。実は、内部的に使っているvalidator.jsにはequals()というメソッドがあるのですが、check()を使う位置では比較する値を取得できないのでcustom()を使って実装しています。isAfter()例えば、「2000年1月15日」よりも後の日付かどうかをチェックする場合です。「2000-01-16」以降の日付だとバリデーションを通過します。isBefore()例えば、「2000年1月15日」よりも前の日付かどうかをチェックする場合です。「2000-01-14」以前の日付だとバリデーションを通過します。バリデーションを通過できるのは、半角のa〜zとA〜Zです。バリデーションを通過できるのは、半角のa〜zとA〜Z、1〜9です。バリデーションを通過できるのは、半角のa〜zとA〜Z、そして!や*などのアスキー文字です。isBoolean()例えば、入力が「true」もしくは「false」かをチェックする場合です。バリデーションを通過するのは半角小文字の「true」と「false」だけです。isLength()例えば、入力された文字列の長さが0〜5の範囲かどうかをチェックする場合です。全角・半角関係なく単純に文字の数をチェックする形式です。バイト長さをチェックしたい場合は、isByteLength()を使ってください。isByteLength()例えば、入力された文字列のバイト長が(UTF-8として)0〜5の範囲かどうかをチェックする場合です。この例の場合「12345」はバリデーションを通過しますが、「ねこ」は通過しません。UTF-8は3バイト文字なので、長さが6になるからです。※もし単純に文字列の長さをチェックしたい場合はisLength()を使ってください。isCreditCard()例えば、入力されたクレジットカード番号が正しいかどうかをチェックする場合です。文字列が正しいかのチェックです。isCurrency()例えば、「¥1,000」という文字列が金額として正しいかをチェックする場合です。オプションは、日本環境に合うものをピックアップしました。その他のものはこちらで確認してください。isDataURI()例えば、dataURIに変換された画像データが正しい形式になっているかどうかをチェックする場合です。isNumeric()例えば、「-10」「1.5」「3」などの数値をチェックする場合です。isInt()例えば、整数かどうかをチェックする場合です。})※この例では、入力値が3、もしくは10はバリデーションを通過します。})※この例の場合、1.2と5.8はバリデーションを通過できます。isDecimal()例えば、野球で言う防御率(例:2.59)など小数点つきの数字として正しいかをチェックする場合です。})※もし小数点以下が1桁以上、2桁以下にする場合は、1,2をセットしてください。isDivisibleBy()check('attribute_name').isDivisibleBy(3)※この例では、9なバリデーションを通過し、8ならエラーになります。isMultibyte()check('attribute_name').isMultibyte()※例えば「モンゴル800」はバリデーションを通過します。isFullWidth()check('attribute_name').isFullWidth()※例えば「モンゴル800」はバリデーションを通過します。isHalfWidth()check('attribute_name').isHalfWidth()※例えば「モンゴル800」はバリデーションを通過します。isVariableWidth()check('attribute_name').isVariableWidth()※例えば、「モンゴル」「800」はバリデーションを通過できませんが、「モンゴル800」なら通過できます。isHash()例えば、md5のハッシュ値として正しいかをチェックする場合です。check('attribute_name').isHash('md5')使えるハッシュ形式は以下のとおりです。isMD5()check('attribute_name').isMD5()※その他のハッシュをチェックする場合は、isHashを参照してください。isHexadecimal()check('attribute_name').isHexadecimal()色(16進数)として正しいか例えば、「fff」や「ff0000」など16進数を使った色の表現が正しいかをチェックします。isIn()例えば、入力値が都道府県かどうかをチェックする場合です。isWhitelisted()例えば、1〜5の数字のみで構成された文字化どうかをチェックする場合です。'5'])※この例では、「12345」はバリデーションを通過しますが、「123456」は通過できません。IPアドレスv4とv6に対応しています。isIPRange()例えば「10.0.0.0/24」のようなIPアドレス情報をチェックする場合です。(v4のみ)check('attribute_name').isIPRange()ISBNとして正しいか:isISBNcheck('attribute_name').isISBN()※第1引数に桁数を指定することができます。指定しない場合は両方が有効になります。isISO31661Alpha2()例えば、「JP」などの2桁の国コードをチェックする場合です。isISO31661Alpha3()例えば、「JPN」などの3桁の国コードをチェックする場合です。Error('「YYYY/MM/DD」の正しい日付ではありません。})※過去にvalidator.jsにはisDate()というメソッドがあったようですが、現在は削除されているので、独自にコードを書きました。8601で定められた日付として正しいかどうかをチェックする場合です。check('attribute_name').isISO8601()なお、バリデーションを通過する例は以下になります。3339で定められた日付として正しいかどうかをチェックする場合です。139.8107」となります。isLowercase()check('attribute_name').isLowercase()※例えば、gやjがバリデーションを通過します。全角文字も対応しています。isUppercase()check('attribute_name').isUppercase()※例えば、GやJがバリデーションを通過します。全角文字も対応しています。isMACAddress()check('attribute_name').isMACAddress()※例えば、00:1B:44:11:3A:B7などがバリデーションを通過します。strictModeをtrueにした場合、例えば「+819012345678」というような形式のみバリデーションを通過するようになります。isMongoId()check('attribute_name').isMongoId()※例えば「507f191e810c19729de860ea」がバリデーション通過します。isPort()0〜65535の数字かどうかをチェックする場合です。isPostalCode()check('attribute_name').isPostalCode('JP')※バリデーションを通過する例としては、「131-0045」となり、ハイフンが必要です。引数にUUIDのバージョンを指定できます。'i')※この例では、「abcD」などはバリデーションを通過しますが、「a3b」などは通過できません。※第2引数はmodifierで、任意です。独自のエラーメッセージを使う独自のエラーメッセージを使うには、withMessage()を使います。.not().isEmpty().withMessage('この項目は必須入力です。.isEmail().withMessage('有効なメールアドレスではありません。')ただし、バリデーションがいくつも必要になる場合、同じエラーメッセージを何度もセットするのはめんどうですし、保守管理にも向いているとはいえません。そのため、そんな場合はi18nなどの翻訳パッケージを使う便利です。やり方は次のとおりです。パッケージをインストールしてください。i18nすると、自動で「locales」というフォルダ、そしてその中に(環境によって違うと思いますが)「en.json」と「ja.json」というファイルが作成されます。「app.js」を開いてi18nが使えるようにしましょう。true});これで、i18nの準備は完了です。今回は日本語のみに対応させますので、「locales/ja.json」を開いて次のようにバリデーション・メッセージを追加します。"この項目は必須入力です。}}では、実際にバリデーション・メッセージを使ってみましょう。})また、custom()を使った場合も同様です。})この方法でemailやuniqueなどのメッセージを追加して使うと、今後の保守管理もしやすくなると思います。ちなみにバリデーションのメッセージ内容は、Laravel-langのものを参考にするといいでしょう。独自のバリデーションを使う独自のバリデーションを使う場合は、custom()を使います。送信されたメールアドレスがすでにUsersテーブルに登録済みかどうかをチェックするバリデーションを作ってみましょう。Error('このメールアドレスはすでに登録されています。Error('******')を使う部分です。ここで設定したメッセージがエラーメッセージとして返されることになります。Promise.reject('******');でも同じ結果になります。おわりにということで、今回は「express-validator」でExpressにバリデーション機能をつけてみました。普段からよくLaravelを使う身からすると、「へぇ、こんなバリデーションまで用意してるんだ」というものもあれば、逆に「あー、あれがないのか」などいい部分もそうでない部分もあるようでした。「別の言語を勉強するのは、メインで使う言語のスキルアップにもなる」と聞いたことを思い出しました。皆さんも色々と挑戦してみてくださいね。開発スキルプログラム開発は15年以上。Laravel、Vue.jsをメインとしてPython(機械学習)やElectronの開発もお引き受けしております。過去2度カナダのバンクーバーに滞在していました。開発状況によりましては開発をお待ちいただく可能性がございますが、いつでもご相談は受けさせていただいております。お気軽にご連絡ください!お問い合わせフォーム開発してほしい機能を募集中!MITライセンスで公開します。詳しくはこちらの記事をご覧ください。ぷれりり・プレスリリース掲載無料のプレスリリース・スタンド!播磨孤道(はりまこどう)兵庫周辺のゆったり自転車一人旅の記事を書いていきます。