判断是否符合 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,有值得优化的地方,欢迎指出不足。

京公网安备 11010502036488号