使用者只能輸入 0 到 1.5 之間的數值,小數位數不超過 2 位 (如 0.00、1.50、1.23 合法;1.51、1.234、-0.1 非法)。
// 僅允許數字、可選小數點、最多兩位小數
const regex = /^\d+(\.\d{1,2})?$/;
// 或強制兩位小數:/^\d+(\.\d{2})?$/
\d+:整數部份至少一位(\.\d{1,2})?:小數部份可選,1~2 位function validateInput(value) {
if (!regex.test(value)) return false; // 格式不合法
const num = parseFloat(value);
return num >= 0 && num <= 1.5; // 範圍檢查
}
input.addEventListener('blur', () => {
if (!validateInput(input.value)) {
showError('請輸入 0~1.5 之間的數字,最多兩位小數');
input.focus();
}
});
input.addEventListener('input', () => {
// 移除非數字/小數點
let v = input.value.replace(/[^\d.]/g, '');
// 僅保留第一個小數點
v = v.replace(/\.{2,}/g, '.');
// 限制小數位數
if (v.includes('.')) {
const [int, dec] = v.split('.');
v = int + '.' + dec.slice(0, 2);
}
input.value = v;
});
「正則管格式、JS 管範圍、input 事件管體驗」三層防護,確保資料乾淨進入後端。