純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

日常業務において、フォームの検証は非常に一般的な設計要件です。ログイン ボックスや登録ボックス、アンケートでもフォームの検証が必要です。

一般的に、私たちの実装の考え方は、JS が入力ボックスの入力内容を監視し、ユーザーの入力内容を判別して、次の操作を決定するというものです。

たとえば: (次の例は、優れたオープンソース UI ライブラリである element からのものです)

<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
  <el-フォーム項目
    label="年齢"
    プロパティ="年齢"
    :ルール="[
      {必須: true、メッセージ: '年齢は空欄にできません'},
      { タイプ: 'number'、メッセージ: '年齢は数値でなければなりません'}
    ]"
  >
    <el-input type="age" v-model.number="numberValidateForm.age" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('numberValidateForm')">送信</el-button>
    <el-button @click="resetForm('numberValidateForm')">リセット</el-button>
  </el-form-item>
</el-form>
<スクリプト>
  エクスポートデフォルト{
    データ() {
      戻る {
        数値検証フォーム: {
          年: ''
        }
      };
    },
    メソッド: {
      送信フォーム(フォーム名) {
        this.$refs[formName].validate((valid) => {
          (有効)の場合{
            alert('送信!');
          } それ以外 {
            console.log('送信エラー!!');
            false を返します。
          }
        });
      },
      resetForm(フォーム名) {
        this.$refs[フォーム名].resetFields();
      }
    }
  }
</スクリプト>

上記は正規表現検証ですが、基本的には JS で完了しています。では、これを CSS で実装することはできるでしょうか?答えはイエスです。こちらがデモです

CSS によるフォーム検証の実装

上記のフォーム検証は CSS によって完全に実装されており、コア属性はCSS Level 4 Validityです。 :valid:invalidのプロパティを使用して<input>valueを判断するという考え方です。

完全なコードはこちら

/*
 * css
 */
 :根 {
 	--エラー色: 赤;
 }
 .form > 入力 {
 	下マージン: 10px;
 }
 .form > .f-tips {
 	色: var(--error-color);
 	表示: なし;
 }
 input[type="text"]:無効 ~ input[type="submit"],
 入力[type="password"]:無効 ~ 入力[type="submit"] {
 	表示: なし;
 }
 入力[必須]:無効 + span {
 	表示: インライン;
 }
 
 /*
  *html
  */
<form class="form" id="form" method="get" action="/api/form">
    アカウント:
    <input data-title="アカウント" pattern="[\w]{6,10}" name="アカウント" type="text" 必須 />
    <span class="f-tips">正しい口座番号を入力してください</span>
    <br />
    パスワード:
    <input data-title="パスワード" pattern="[\w]{6,10}" name="パスワード" type="パスワード" 必須 />
    <span class="f-tips">正しいパスワードを入力してください</span>
    <br />
    <input name="button" type="submit" value="送信" />
</フォーム>

エフェクトのスクリーンショット

使用される知識ポイント

1. HTML5<input>の新しい属性: pattern

MDN の説明:

コントロールの値をチェックするための正規表現。パターンは、値の一部ではなく、値全体に一致する必要があります。ユーザーの役に立つように、title 属性を使用してモードを説明します。この属性は、type 属性の値が text、search、tel、url、または email の場合に適用されます。それ以外の場合は無視されます。 (IE10以降に対応)

述べる:

pattern内の検証ルールが不正な場合、たとえば長さチェックでスペースが多すぎる場合、コンソールにエラーが報告されます。詳細は次のとおりです。

<input data-title="アカウント" pattern="/[\w]{6, 10}/" name="アカウント" type="text" 必須 />

CSSJSの検証ルールは異なります。以下の記述は無効になります。コア検証ルールは[]で囲む必要があります。(現在、テストしたいくつかの例でこのようになっています。具体的な詳細はデータで確認する必要があります。より具体的な情報をご存知の方がいらっしゃいましたら、ぜひ教えてください。ありがとうございます!)

<input data-title="アカウント" pattern="/\w{6,10}/" name="アカウント" type="text" 必須 />

2. CSS Level 4 選擇器の新しいプロパティ: invalid

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  デザイナーはコーディングを学ぶ必要がありますか?

>>:  フロントエンド JavaScript ハウスキーパー package.json

推薦する

Vue フォーム入力バインディング v-model

目次1.vモデル2. プロパティとイベントのバインディング3. フォーム要素のバインディング3.1 ...

CSSは高さと幅を固定した要素の比例表示効果を実現します

padding-top パーセンテージを使用すると、固定幅と比例した高さの表示を実現できます。現在の...

Msyql トランザクション分離について知っておくべきこと

トランザクションとは何ですか?トランザクションは、データベース管理システムの実行プロセスにおける論理...

HTMLエリアタグの詳しい説明

<area> タグは、イメージ マップ内の領域を定義します (注: イメージ マップはク...

Linux (CentOS7) で RPM を使用して MySQL 8.0.11 をインストールするチュートリアル

目次1. インストールの準備1. Linux関連情報の表示(Linuxコマンドライン操作) 2. M...

複数のドメイン名に対する Nginx リバース プロキシを使用した HTTP および HTTPS サービスの実装

現在、Nginx は、Web サービスを提供するために、Windows ベースの IIS と Lin...

MySQL データベースの型変換のための CAST 関数と CONVERT 関数の説明

MySQL のCAST()およびCONVERT()関数を使用すると、ある型の値を取得し、別の型の値を...

HTML フォーム送信アクションと URL ジャンプアクションの違い

フォームのアクションは URL ジャンプとは異なります。フォームはバックグラウンドにデータを渡すこと...

VMWare仮想マシンのcentosの時間が現地時間と矛盾する問題を解決する

VM Ware 仮想マシン CentOS の時刻は、次の図に示すように、現地時間と一致しません。おそ...

Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明

1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...

WebWorkerはJavaScriptサンドボックスの詳細をカプセル化します

目次1. シナリオ2. IJavaScriptShadowboxを実装する2.1 メインスレッドの実...

Sparkの紹介とHadoopとの比較

目次1. SparkとHadoopの比較1.1 Haoopの欠点1.2 Hadoop MR に対する...

MySQL 8.0 redo ログの詳細な分析

目次序文REDOログの生成REDOログ送信REDOログの保存と通知ユーザースレッドに通知要約する序文...

LinuxサーバーにGRUBをインストールする手順

Linux サーバーに GRUB をインストールする方法クラウド移行ツールを使用して、CentOS ...

React+Koa によるファイルアップロードの実装例

目次背景サーバーの依存関係バックエンド構成クロスドメインバックエンド構成の静的リソースアクセスではk...