Webサイトでユーザーから情報を入力してもらう場合、promptダイアログは最も簡単な実装方法の1つです。この記事では、JavaScriptのpromptの基本から応用まで、初心者の方にもわかりやすく解説していきます。
promptとは
promptは、ブラウザ上でポップアップダイアログを表示し、ユーザーからテキスト入力を受け付けるJavaScriptの組み込み関数です。ダイアログには以下の要素が含まれます:
- メッセージ表示エリア
- テキスト入力フィールド
- OKボタン
- キャンセルボタン
基本的な使い方
基本構文
let 変数名 = prompt("表示したいメッセージ");
シンプルな例
let userName = prompt("お名前を入力してください");
console.log(userName); // 入力された名前が表示されます
初期値の設定
promptには第2引数を指定することで、入力フィールドに初期値を設定できます:
let userName = prompt("お名前を入力してください", "山田太郎");
入力値の処理
基本的な入力チェック
let userInput = prompt("年齢を入力してください");
if (userInput === null) {
console.log("キャンセルされました");
} else if (userInput === "") {
console.log("何も入力されませんでした");
} else {
console.log("入力された年齢: " + userInput);
}
数値入力の処理
let age = prompt("年齢を入力してください");
age = parseInt(age); // 文字列を数値に変換
if (isNaN(age)) {
console.log("有効な数値を入力してください");
} else {
console.log("あなたは" + age + "歳です");
}
入力値の検証と活用
数値入力の処理
// 数値入力の例
let age = prompt("年齢を入力してください");
// 数値に変換して検証
let numAge = Number(age);
if (isNaN(numAge)) {
alert("数値を入力してください");
} else if (numAge < 0 || numAge > 150) {
alert("正しい年齢を入力してください");
} else {
alert(`あなたは${numAge}歳ですね`);
}
入力キャンセルの処理
// 入力のキャンセル処理
let userInput = prompt("ユーザー名を入力してください");
if (userInput === null) {
alert("キャンセルされました");
} else if (userInput.trim() === "") {
alert("名前を入力してください");
} else {
alert(`ようこそ、${userInput}さん`);
}
実践的な使用例
ログイン処理の例
function login() {
let username = prompt("ユーザー名を入力してください");
if (!username) return false;
let password = prompt("パスワードを入力してください");
if (!password) return false;
// ここで認証処理を行う
if (username === "admin" && password === "1234") {
alert("ログイン成功!");
return true;
} else {
alert("ログイン失敗");
return false;
}
}
計算機の例
function calculator() {
let num1 = prompt("1つ目の数字を入力してください");
let num2 = prompt("2つ目の数字を入力してください");
let operator = prompt("演算子を入力してください(+, -, *, /)");
num1 = Number(num1);
num2 = Number(num2);
if (isNaN(num1) || isNaN(num2)) {
alert("有効な数字を入力してください");
return;
}
let result;
switch(operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 === 0) {
alert("0で割ることはできません");
return;
}
result = num1 / num2;
break;
default:
alert("無効な演算子です");
return;
}
alert(`計算結果: ${result}`);
}
promptの応用とベストプラクティス
入力値のバリデーション(検証)パターン
function validateEmail() {
let email = prompt("メールアドレスを入力してください");
// メールアドレスの基本的な形式チェック
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!email) {
alert("メールアドレスを入力してください");
return false;
}
if (!emailPattern.test(email)) {
alert("正しいメールアドレスの形式で入力してください");
return false;
}
alert("有効なメールアドレスです");
return true;
}
複数の入力を連続して受け取る
function getUserInfo() {
const userInfo = {
name: null,
age: null,
email: null
};
// 名前の入力
userInfo.name = prompt("お名前を入力してください");
if (!userInfo.name) return null;
// 年齢の入力
let age = prompt("年齢を入力してください");
age = parseInt(age);
if (isNaN(age) || age < 0 || age > 150) {
alert("正しい年齢を入力してください");
return null;
}
userInfo.age = age;
// メールアドレスの入力
userInfo.email = prompt("メールアドレスを入力してください");
if (!userInfo.email) return null;
return userInfo;
}
promptの制限事項と代替手段
promptの制限事項
- スタイルのカスタマイズができない
- モバイルデバイスでの表示が最適化されていない
- 一部のブラウザでブロックされる可能性がある
- パスワード入力時にテキストが平文で表示される
モダンな代替手段
カスタムモーダルダイアログの例
// HTML
`
<div id="customPrompt" style="display: none;">
<div class="modal-content">
<h2>入力してください</h2>
<input type="text" id="userInput">
<button onclick="submitInput()">OK</button>
<button onclick="cancelInput()">キャンセル</button>
</div>
</div>
`
// JavaScript
function customPrompt(message) {
return new Promise((resolve, reject) => {
const modal = document.getElementById('customPrompt');
modal.style.display = 'block';
window.submitInput = () => {
const input = document.getElementById('userInput').value;
modal.style.display = 'none';
resolve(input);
};
window.cancelInput = () => {
modal.style.display = 'none';
resolve(null);
};
});
}
セキュリティの考慮事項
入力値のサニタイズ
function sanitizeInput(input) {
// 特殊文字をエスケープ
return input
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
// 使用例
let userInput = prompt("メッセージを入力してください");
if (userInput) {
let safeInput = sanitizeInput(userInput);
document.getElementById('output').innerHTML = safeInput;
}
まとめ
JavaScriptのpromptは、シンプルながら効果的なユーザー入力の手段です。初心者の方でも簡単に実装できる一方で、本番環境では制限事項も考慮する必要があります。用途に応じて、promptとカスタムダイアログを使い分けることで、より良いユーザー体験を提供できます。
モダンな開発では、promptの代わりにカスタムモーダルやフォームを使用することが推奨されますが、プロトタイプ開発や学習目的では、promptは依然として有用なツールです。