GH GambleHub

組み込みの検証とUXエラー

1)原則

1.予測ケア、処罰ではありません。エラーの前に、正しく入力する方法を示します。
2.データを失うことはありません。入力されたエラーは破棄されません。サポートCancel/Retry。
3.表示の瞬間。

入力する前に:ヘルパーテキスト(ルールと例)。
中:ソフトヒント/マスク/自動置換。
後(ぼかし/送信):指示「修正方法」で明確なエラー。
4.注意経済。一つのメッセージは一つの理由と一つの行動です。
5.アクセシビリティ。テキスト+アイコン/色、ARIA経由でフィールドにリンクし、最初の誤ったフィールドにフォーカスします。

2)検証レイヤー

クライアント同期:フォーマット、長さ、必須、マスク。速くて安い。
クライアント非同期:ログイン一意性、BIN/IBANチェック、APIヒント。暴走しています。
サーバールーム:ビジネスルール、制限、リスクスコアリング、承認/権利。最後の手段の真実。
ルール:理想的なクライアントチェックでも、サーバーは最終テキストを確認して生成します。

3)タイミングとデバンク

100 ms ≤のぼかし→インスタントフィードバックの検証。
非同期検査-入力停止後250-400ミリ秒をデビットします。
成功の確認-laconic (「OK」)または緑のアイコン。「敬礼」なし。
「送信」では、エラーのリストを表示し、最初にフォーカスを転送します。

js const debounce = (fn, ms=300)=>{let t; return (...a)=>{clearTimeout(t); t=setTimeout(()=>fn(...a),ms)}}

4)コピーライティングエラー

テンプレート:理由→修正方法→代替(もしあれば)。

良い:"パスワードは8文字より短いです。文字を追加するか、フレーズを使用します。

良い: "イバンは正しく見えません。長さと文字をチェック:A-Z、 0-9"

悪い:「入力が正しくありません」。
ユーザーを非難しないでください。専門用語やコードは避けてください。
機密領域(支払い/ASC)では、安全性を明らかにする詳細は避けています。

5)メッセージ表示パターン

5.1フィールド(インライン)

'aria-invalid=」true」、' aria-describedby'。
簡単に、具体的には;長い段落なしで。
色+アイコン、しかし意味-テキストで。

5.2フォームの下(要約)

フィールドアンカーを含むすべてのエラーを一覧表示します。
「Go to error」ボタン/アイテムをクリックするとフォーカスがシフトされます。

5.3送信の過程で

繰り返しブロック(状態'busy')。
3-5秒のタイムアウトで-「確認を待っています……」安全なリプレイで。

6)マスク、自動先端および校正装置

マスクは挿入/編集を妨げてはいけません。自由な記入を許可して下さい、フードの下で正常化して下さい。
自動ヒント:サンプルフォーマット、プレースホルダをヒントとして表示します。「必須」部分ではありません。
正規化:スペースのトリミング、レジスタの統一、自動フォーマット(例:'+1 (___) ___-____')-しかし「、クリーン」バージョンをソースデータに保ちます。

7)空室状況(A11y)

リンク:'label' ↔ 'input'、 'aria-descripedby'のエラー。
Critical-'role="alert'、 informational-'role="status"'。
「:focus-visible」という誤ったフィールドにフォーカスを戻します。
テキスト/アイコンコントラスト≥ AA;意味は色だけに依存しません。

html
<label for="email">Email</label>
<input id="email" name="email" aria-describedby="email-help email-err">
<small id = "email-help "> For example, user @ domain. tld</small>
<p id = "email-err" class =" field-error" role = "alert" hidden> Check email format </p>

8)国際的なフォーマットとローカライズ

名前/アドレス:異なるアルファベット、長さ、アポストロフィ、ハイフンを許可します。
日付/通貨/数字:ローカル入力フォーマットと厳格な内部ストレージ構造(ISO/セント数)を使用します。
電話:国際的なフォーマット'+CC'の入力、国によって自動ヒント。
メッセージ言語:短い、文化的に中立;線の長さの+20-30%を置いて下さい。

9)セキュリティとプライバシー

アカウントが存在/存在しないことを表示しないでください-一般的なテキスト:「電子メールが登録されている場合は、電子メールを送信します」。
機密データ(PAN、パスポート)をマスクします。
重要なステップ(入札/支払い)では、idempotenceと「安全なリプレイ」を使用します。
ログ-メッセージ内のPIIなしの相関ID。

10)進捗状況の保存

ドラフトオートセーブ(ローカル/サーバー)。
提出エラーの場合-フォームが入力されたまま。後で繰り返すことを提案しました。
マルチステッププロセス(KYC)の場合-完了したステップを保存します。

11)非同期検証

Debowns 250-400ミリ秒;画面全体をブロックせずにフィールドの近くに「check」……を表示します。
レイアウトの「ツイッチ」なしで成功/失敗の明確な兆候。
ネットワークタイムアウト→"検証できません。リスクを継続したいですか?(該当する場合)またはやり直し。

js const checkUsername = debounce(async (v)=>{
state. usernameChecking = true;
const ok = await api. unique('username', v). catch(()=>null);
state. usernameChecking = false;
state. usernameValid = ok === true;
}, 300);

12)支払いフォームとKYC(詳細)

マップ:PAN形式、用語、CVC-入力された検証;エラー-銀行による拒否の理由を開示せずに。
A2A/wallets:国/限度による許可の確認、手数料/期限についての明確なテキスト。
KYC:写真/ドキュメント、プレビュー、ファイルサイズ/タイプ、検証時間、プライバシーに関するステップバイステップの要件。
責任あるプレイ:メッセージは中立で、「制限を設定「/」ヘルプ「アクションがあります。

13) Antipatterns

デバンキングせずに「文字ごと」エラーを表示します。
エラー時にフォームをリセットします。
フィールド/ルールのない「無効なエントリ」メッセージ。
色/アイコンでのみ重要な情報。
ページ全体をロックして、単一のフィールドを検証します。
ネットワーク障害時にオフラインモードと繰り返しが存在しない。

14)システムトークンの設計(例)

json
{
"validation": {
"debounceMs": 300,
"blurFeedbackMs": 100,
"asyncTimeoutMs": 5000,
"summaryMaxItems": 6
},
"a11y": {
"useAriaDescribedby": true,
"errorRole": "alert",
"statusRole": "status"
},
"visual": {
"fieldGap": 8,
"iconSize": 16,
"borderRadius": 10
}
}

15)実装スニペット

インラインバリデータ付きフィールド(format+server check):
js const rules = {
email: v => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v)         "Check email format"
};
async function validateEmail(v){
const fmt = rules. email(v);
if (fmt!== true) return fmt;
try {
const r = await fetch(`/api/email/check? v=${encodeURIComponent(v)}`);
const { allowed } = await r. json();
return allowed? true: "This email is not available. Please select another. ";
} catch {
return "Failed to validate. Repeat later. ";
}
}
フォーカスエラーの概要:
ts function focusFirstError() {
const err = document. querySelector('[aria-invalid="true"]');
if (err) err. focus({ preventScroll:false });
}
ローカルでドラフトを保存する:
js const saveDraft = debounce(form => localStorage. setItem('draft', JSON. stringify(Object. fromEntries(new FormData(form)))), 500);
form. addEventListener('input', ()=>saveDraft(form));

16)メトリクスとコントロール

修正までの時間。
フィールドと理由(format/limits/server)によるエラー率。
再試行成功率。
放棄された形状とピッチの深さの割合。
プロンプトがいっぱい:CTR「詳細」、プロンプトを隠す頻度。

17) QAチェックリスト

A11y

  • フォーカスは最初の無効なフィールドに移動します。'aria-describedby'/'aria-invalid'セット。
  • 対照≥ AA;メッセージは色のみで独立しています。

動作

  • debunkingによるビルトイン検証。エラーはぼかしよりも早く表示されません(クリティカルマスクを除く)。
  • サマリーが送信時に生成され、フィールドはクリアされません。
  • 非同期チェックはページをロックしません。タイムアウトとリプレイがあります。

テキスト

  • 理由+修正方法;コード/罪悪感はありません。
  • ローカライズはレイアウトを壊しません。例は関連しています。

セキュリティ

  • メッセージにPIIが漏れない。アカウントの存在を開示しないでください。
  • 重要な操作のためのIdempotency。

18)設計システムにおけるドキュメンテーション

コンポーネント:'FieldError'、 'FormSummary'、 'HelperText'、 'BusyButton'。
典型的なフィールド(電子メール、電話、パスワード、住所、IBAN、日付)のルールマップ。
デバンキング、非同期チェック、オフライン動作のガイド。
頻繁なエラーと前/後の例のテキストテンプレート。

概要

組み込みの検証は、予測ケア、明確な指示、データに対する慎重な態度についてです。ローカルとサーバーで確認し、特定のアクションで適切なタイミングでエラーを表示し、可用性とプライバシーを尊重し、進捗状況を保存し、デバンを使用します。従って形態は友好的になり、間違いは速く、固定可能になる。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。