判断是否符合 USD 格式
不会用正则表达式,所以根据自己的理解写了一个题解
function isUSD(str) { var arr = [] if (str[0] !== "$") return false if (str[1] === "," || str[1] === ".") return false if (str.indexOf(".") === str.length-3) { for (var i=0;i<=str.length-4;i++) { if (str[i] === ",") { arr.push(str.indexOf(",",i)) } } return del() } else if (str.indexOf(".") === -1 ) { for (var i=0;i<=str.length-1;i++) { if (str[i] === ",") { arr.push(str.indexOf(",",i)) } } return del() } else { return false } //主体部分,分为有无小数点的判断 function del() { // 用作判断的函数 var index = str.indexOf(".") if (arr.length === 0) { if (index === -1 && str.length <= 4) { return true } else if (index === str.length-3 && str.length <= 7) { return true } else { return false } } else if (arr.length === 1) { if (index === -1 && arr[0] - str.length+1 === -3 && str.length <= 8) { return true } else if (index === str.length-3 && arr[0] - str.length+4 === -3 && str.length <= 11) { return true } else { return false } } // 这一段写USD中逗号个数为0,1时进行单独处理 if (index === -1 && arr[arr.length-1]-str.length+1 === -3 && 1 - arr[0] >= -3) { // console.log("开头结尾判断-1正确") for (var i=0;i<arr.length-1;i++) { if (arr[i] - arr[i+1] !== -4) return false } return true } else if (index !== -1 && arr[arr.length-1]-str.length+4 === -3 && 1 - arr[0] >= -3) { // console.log("开头结尾判断!-1正确") for (var i=0;i<arr.length-1;i++) { if (arr[i] - arr[i+1] !== -4) return false } return true } else { return false } } }
运算的时间是1300ms,有值得优化的地方,欢迎指出不足。