- Create validator.js with validateNumericInput() function
- Validates numeric strings; allows digits, leading minus, single decimal point
- Rejects invalid characters, multiple decimals, misplaced minus signs
- Returns { isValid, value, sanitized } object
- Link validator.js in index.html <head>
- Update CLAUDE.md project structure to include validator.js
48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
/**
|
|
* Validates a numeric input string.
|
|
*
|
|
* Allowed characters: digits 0-9, a single decimal point, a leading minus sign.
|
|
* Returns an object with:
|
|
* isValid {boolean} - true when the string represents a well-formed number
|
|
* value {number|null} - parsed numeric value, or null when invalid
|
|
* sanitized {string} - trimmed input string
|
|
*/
|
|
function validateNumericInput(input) {
|
|
var str = String(input).trim();
|
|
var result = { isValid: false, value: null, sanitized: str };
|
|
|
|
if (str === '') {
|
|
return result;
|
|
}
|
|
|
|
// Reject characters other than digits, decimal point, and minus sign
|
|
if (/[^0-9.\-]/.test(str)) {
|
|
return result;
|
|
}
|
|
|
|
// Minus sign is only valid as the very first character
|
|
var minusCount = (str.match(/-/g) || []).length;
|
|
if (minusCount > 1 || (minusCount === 1 && str.charAt(0) !== '-')) {
|
|
return result;
|
|
}
|
|
|
|
// Only one decimal point is allowed
|
|
if ((str.match(/\./g) || []).length > 1) {
|
|
return result;
|
|
}
|
|
|
|
// A bare '-' or '.' is not a valid number
|
|
if (str === '-' || str === '.') {
|
|
return result;
|
|
}
|
|
|
|
var parsed = parseFloat(str);
|
|
if (isNaN(parsed)) {
|
|
return result;
|
|
}
|
|
|
|
result.isValid = true;
|
|
result.value = parsed;
|
|
return result;
|
|
}
|