Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

20240209_お昼時のLT会No.3 Validation

Avatar for cetorhinusm cetorhinusm
February 13, 2024
18

20240209_お昼時のLT会No.3 Validation

Avatar for cetorhinusm

cetorhinusm

February 13, 2024
Tweet

Transcript

  1. 2.基本のき -なぜ必要か- プログラムの基本構造: 「入力 → 処理 → 出力」 プログラムの動作原理: プログラムが意図した”妥当な入力(=正しい入力&入

    力ミス)”のデータでしか正しく動作できない セキュリティ問題発生の原理: セキュリティ問題となる大半のプログラムの誤作 動は、プログラマが意図しない”不正なデータ入力”によって起きる”不正な動 作”が原因となっている(他の原因は設計ミスなど) 原則: 原理と事実より、コンピュータープログラムを正しく動作させる対策(= セキュリティ対策)として妥当性検証済みデータのみを処理させる
  2. 💡入力された不要なスペースの削除 3. -検証前に処理を実行する- #class Member < ApplicationRecord before_validation :before_validations …

    private def before_validations # post_codeとtelの文字列から先頭と末尾のスペースを除去する post_code.strip! tel.strip! end end 「before_validation」メソッドでは 「全検証の前に1度だけ実行されるメソッド(before_validationsメソッド)」を登録できる ⇒プライベートメソッド内に検証前の処理を定義する
  3. 💡ActiveModel::Validationsモジュールで標準で用意されていない複雑な検証は   カスタマイズする 3. -カスタムバリデーション- # 数字3桁+ハイフン(-)+数字4桁の形式であることを検証するクラス class PostCodeValidator <

    ActiveModel::EachValidator def validate_each(record, attribute, value) record.errors.add(attribute, 'は、数字3桁+ハイフン(-)+数字4桁の形式で入力してください。') unless value =~ ¥\A[0-9]{3}-[0-9]{4}¥z/ end end class Member < ApplicationRecord … 「PostCodeValidator」を検証クラス名にした場合 検証機能として「post_code」を指定できる  ⇒引数として右表の情報が渡される
  4. 💡ActiveModel::Validationsモジュールで標準で用意されていない複雑な検証は   カスタマイズする 3. -カスタムバリデーション- # 数字3桁+ハイフン(-)+数字4桁の形式であることを検証するクラス class PostCodeValidator <

    ActiveModel::EachValidator def validate_each(record, attribute, value) record.errors.add(attribute, 'は、数字3桁+ハイフン(-)+数字4桁の形式で入力してください。') unless value =~ ¥\A[0-9]{3}-[0-9]{4}¥z/ end end class Member < ApplicationRecord … 「PostCodeValidator」を検証クラス名にした場合 検証機能として「post_code」を指定できる  ⇒引数として右表の情報が渡される 正規表現
  5. 💡いくつかの文字列を一つの形式で表現するための表現方法 3. -正規表現- # 数字3桁+ハイフン(-)+数字4桁の形式であることを検証するクラス 正規表現: /¥A[0-9]{3}-[0-9]{4}¥z/ [0-9]  :0-9のうちいずれかの1文字に一致 {3} 

    :3桁 ※{}:量指定子 直前のパターンが何回連続するかNumで指定 ¥A , ¥z :バリデーションで完全一致を示す目的で使用する      ¥A:文字列の先頭 ¥z:文字列の末尾