测试计算器的小数字符串

时间:2018-07-16 19:11:50

标签: javascript regex

我有一个名为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等...我知道我需要使用正则表达式方法,但不确定消除不必要的十进制出现的模式。感谢您的帮助。

2 个答案:

答案 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));

希望,这可能会对您有所帮助。