本文へ移動
easeweb
ご相談
トピックを検索

入力した番号や貼り付けた番号が変わってしまう入力マスク

電話番号欄の入力マスクには数字の枠が10個しかないため、先頭に+1を付けて貼り付けた番号が別の番号に変わり、空いた枠の並びも欄の値として読み上げられてしまう

ベストプラクティス
WCAGの達成基準では必須ではない
関連するWCAG 2.2
SC 3.3.2A
必須とする規格
Section 508、EN 301 549、JIS X 8341-3 では必須ではない
問題あり Inputmask('(999) 999-9999').mask(tel);
アクセシビリティの問題を示した図: 手の操作:どうして番号が変わったの?
01

問題

番号を貼り付けたり、自動入力したり、自分の書き方で入力したりすると、伝えた番号とは別の番号になり、スクリーンリーダーの利用者には空いた枠の並びが欄の値として読み上げられる

02

試してみる

連絡先カードの番号をコピーして電話番号欄に貼り付け、「次へ」を押してみましょう

  • 問題1: まずTabキーで欄に移動し、フォームの下に表示される読み上げを確かめてください。次に番号を貼り付けます。どの数字が入りましたか?

  • 問題2: 番号を貼り付けたあと、欄を空にして自分で2125550147と入力し、最初の5の直後をクリックして、Backspaceで消して別の数字を入力してください。カーソルはどこへ行きますか?

  • 修正を適用します。 番号を貼り付けるか、スペース、ドット、括弧を入れて好きな書き方で入力し、「次へ」を押してください。

問題あり 修正できますか?

あなたの連絡先カード

携帯電話 +1 212 555 0147

配送のお知らせ

スクリーンリーダーの読み上げ:

(Tabで欄へ移動)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

番号は入力されたまま受け取り、数字だけを確かめる

修正前

欄の中にパターンを入れるマスクのライブラリー

<form>  <label for="tel">電話番号</label>  <input id="tel" name="tel" type="tel" autocomplete="tel">  <button type="submit">次へ</button></form>
問題点3点
  • 欄にフォーカスが移ると、値が (__) - というパターンになり、スクリーンリーダーはそれを欄の中身として読み上げる。
  • マスクには10個の枠しかない。+1 212 555 0147を貼り付けると、最初の10桁で枠が埋まって「(121) 255-5014」と表示され、最後の7は消える。
  • +は捨てられ、番号が変わったことは何も伝えられない。
修正後

マスクを使わず、送信するときに数字を確かめる

<form>  <label for="tel">電話番号</label>  <p id="tel-hint">市外局番を含めて入力してください。例:(212) 555-0147</p>  <input id="tel" name="tel" type="tel" autocomplete="tel"    aria-describedby="tel-hint tel-error">  <p id="tel-error"></p>  <button type="submit">次へ</button></form>
修正の手順5ステップ
  1. マスクを外し、スペース、括弧、ハイフン、ドットが入っていても、入力された番号も貼り付けられた番号も、そのまま欄に残す。
  2. ラベルの下に例を示し、aria-describedby で欄に関連付ける。例は欄と一緒に読み上げられ、入力中も画面に残る。
  3. 送信するときに数字だけを取り出し、11桁なら先頭の1を取り除く。「+1 212 555 0147」も「(212) 555-0147」も「212.555.0147」も、同じ10桁になる。
  4. 桁数が合わない値には、何を入力すればよいかを伝えるメッセージを、欄に関連付けて出す。
  5. 10桁の数字を送信する。リクエストはこのスクリプトを通らずに届くこともあるため、サーバーでも同じように数字を取り出す。

2つの修正前をどちらも直します。入力中に欄を書き換えるものはないので、カーソルは利用者が置いた場所から動かず、貼り付けた番号も欠けずに入ります。3.3.2は修正前と同じく満たし、形式は言葉で示されるようになります。

04

修正の確認

6項目、マウス不要

確認方法: キーボード、タッチ、自動入力、スクリーンリーダー

6件中0件を確認済み

OS、ブラウザー、支援技術のバージョン、ビルド、日付、各手順の実際の結果を記録してください。共通の電話番号欄やその整形の処理を変えたら、もう一度確認します。

制限

これは出発点となる実装例で、すべてのアプリケーションでの動作を保証するものではありません。例は、10桁で、国番号1が付くこともある米国の番号です。ほかの国では桁数が異なり、国をまたぐフォームでは+を残します。番号を区切りごとに3つの欄に分けて尋ねるのは別の問題で、「分割した欄それぞれに名前がない日付や電話番号の入力欄」で扱っています。日本語入力で全角の数字が入る欄の問題は、「全角数字を受け付けず、理由も示さない入力欄」で扱っています。送信に失敗したあとのメッセージの伝え方は、「直し方がわからないフォームエラー」で扱っています。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る