/** * 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; }