所以我需要编写一个脚本来验证大于零且小于 100 的数字。问题是,只有当中间位置有小数并且至少有两位小数时,才能接受该数字。
示例:19.30
将验证,但9.3
、9.30
和19.3
将被视为无效。
我认为正则表达式是验证十进制条件的最佳方式?
代码中的注释:
function validNumber(string) {
// parse string into number
let number = parseFloat(string, 10);
// check if number is in range
if (number <= 0 || number >= 100) return false;
// check if number is formatted correctly
if (string !== number.toFixed(2)) return false;
// return true if all conditions pass
return true;
}
console.log(validNumber("19.30")); // true
console.log(validNumber("9.3")); // false
console.log(validNumber("19.3")); // false
console.log(validNumber("100.30")); // false
console.log(validNumber("1.00")); // true
你可以做的是在小数上拆分,然后测试字符串的长度。
function validate(number) {
let [whole, decimal] = number.toString().split('.', 2)
let int = parseInt(whole)
return whole.length == decimal.length && decimal.length >= 2
&& int > 0 && int < 100
}
console.log(validate('19.30'))
console.log(validate('9.3'))
console.log(validate('9.30'))
console.log(validate('-9.30'))
console.log(validate('19.3'))
console.log(validate('99.99'))
console.log(validate('1.111'))
console.log(validate('100.111'))
console.log(validate('1000.111'))
以下正则表达式满足您的需求,我认为提供的输入是字符串以及比较运算符
d{1,3}.d{2}+
您可以按如下方式使用它:
const isValid = (input) => {
const num = parseFloat(input, 10);
return (!!input.match(/d{1,3}.d{2}+/) && num > 0 && num < 100);
};
isValid('19.3') // => false
isValid('19.30') // => true