【HTML5】input type=”tel”の使い方|電話番号入力欄の実装と注意点

【HTML5】input type="tel"の使い方|電話番号入力欄の実装と注意点 HTML/CSS

HTML5 で導入された <input type="tel"> は、電話番号入力に特化した入力フィールドを作るときに使用します。見た目は通常のテキストボックスと同じですが、スマートフォンでの入力時にテンキーを表示させられるため、ユーザー体験を大きく向上させることができます。この記事では、基本的な使い方からバリデーションの扱い、実装上の注意点まで解説します。

基本的な使い方

type="tel" を指定すると、電話番号入力用のフィールドを作成できます。デスクトップでは通常のテキスト入力欄ですが、スマートフォンではテンキーが表示され、数字入力がしやすくなります。

<form>
  <label for="phone">電話番号:</label>
  <input type="tel" id="phone" name="phone" placeholder="090-1234-5678">
  <button type="submit">送信</button>
</form>

自動バリデーションがない点に注意

type="email"type="url" のように自動で形式チェックが行われることはありません。type="tel" はあくまで「入力補助」の役割であり、入力内容の妥当性は pattern 属性や JavaScript で検証する必要があります。

<input type="tel" name="phone"
       pattern="0\d{1,4}-\d{1,4}-\d{4}"
       placeholder="03-1234-5678" required>

この例では市外局番から始まる日本の電話番号形式(0で始まり、ハイフン区切り)をチェックする正規表現を設定しています。pattern を使うと、ブラウザが入力値を検証し、不正な値が入力された場合に送信をブロックします。

国際電話番号の入力を想定する場合

国際番号(+81 など)を扱う場合は pattern を調整し、title 属性で入力フォーマットを説明するのが親切です。

<input type="tel" name="phone"
       pattern="^\+?[0-9\-]{6,15}$"
       placeholder="+81-90-1234-5678"
       title="国際電話番号形式(+81 など)で入力してください">

スマートフォンでの挙動

type="tel" はスマホでテンキーを表示してくれますが、端末やブラウザによってレイアウトが異なる場合があります。確実に数字入力だけに限定したい場合は inputmode="numeric" を併用します。

<input type="tel" name="phone" inputmode="numeric" placeholder="09012345678">

inputmode="numeric" を付与すると、数字だけのキーボードが優先され、ユーザーがよりスムーズに入力できます。

アクセシビリティ上の注意点

placeholder だけに頼るのではなく、必ず <label> で入力欄の意味を明示しましょう。スクリーンリーダー利用者にも「電話番号入力欄」であることが伝わり、入力ミスを防ぎやすくなります。

まとめ

<input type="tel"> は、電話番号入力に最適化されたフィールドを提供し、特にスマートフォンでのユーザビリティを向上させます。ただし自動バリデーションは行われないため、pattern 属性や JavaScript による検証を組み合わせる必要があります。国内向けなら日本の形式に合わせたパターンを、国際的なサイトなら国番号を含むフォーマットを考慮して実装しましょう。