我有一个名为userInput
的数组,正在推送输入以最终对其执行eval()计算。
我要添加小数功能,但需要测试数组中是否已经有小数,以避免类似3.00.00.00之类的问题。
我当前的功能
function addPeriod() {
if((inputArray.length == 0) || inputArray[inputArray.length -1] == '.') {
//do nothing
} else {
inputArray.push('.');
console.log(inputArray);
screenText.append('.');
}
}
使用userInput
后,当前的userInput.join('')
数组现在在操作过程中的显示方式类似于3 + 2.00 / 1
等...我知道我需要使用正则表达式方法,但不确定消除不必要的十进制出现的模式。感谢您的帮助。
答案 0 :(得分:1)
您可以将输入字符串拆分为小数并计算长度。输入的小数位数为1或0的任何字符都应为2或更短。
var test = "3.0" // Valid, return true
var test2 = ".3.0" // Invalid, return false
var test3 = "30" // Valid, return true
console.log(test.split('.').length <= 2)
console.log(test2.split('.').length <= 2)
console.log(test3.split('.').length <= 2)
编辑: 我个人更喜欢Regex答案的可读性和感觉,但是splitting is significantly faster是在搜索字符串中是否存在某个字符时使用的。
在这里您可以看到split()与regex()速度测试:
var i = 0;
var split_start = new Date().getTime();
while (i < 30000) {
"1234,453,123,324".split(",").length -1;
i++;
}
var split_end = new Date().getTime();
var split_time = split_end - split_start;
i= 0;
var reg_start = new Date().getTime();
while (i < 30000) {
("1234,453,123,324".match(/,/g) || []).length;
i++;
}
var reg_end = new Date().getTime();
var reg_time = reg_end - reg_start;
alert ('Split Execution time: ' + split_time + "\n" + 'RegExp Execution time: ' + reg_time + "\n");
答案 1 :(得分:0)
这是测试多个点的正则表达式:
var text = "3.0.0";
var text1 = "3.0.00.00";
var text2 = "3.0";
var text3 = ".3.0";
var text4 = "30";
console.log(/^\d+(\.\d{0,2})?$/.test(text));
console.log(/^\d+(\.\d{0,2})?$/.test(text1));
console.log(/^\d+(\.\d{0,2})?$/.test(text2));
console.log(/^\d+(\.\d{0,2})?$/.test(text3));
console.log(/^\d+(\.\d{0,2})?$/.test(text4));
希望,这可能会对您有所帮助。