写个简单一些的,你参考一下。
function format(str) {
if (/^\$?(\d+)(?:\.(\d{1,2}))?$/.test(str)) {
var m = RegExp.$1; //整数部分
var p = RegExp.$2; //小数部分
if (p.length==0 && m.length>3) { //没有小数,整数部分超过3位移动小数点,99999 -> 999.99
p = m.slice(3);
m = m.slice(0,3);
}
if (m.length > 3 || p.length > 2) //整数部分超过3位 小数部分超过2位
return 'error';
return "$"+m+"."+(p+"00").slice(0,2);
} else
return 'error';
}
var a = ["$999.99","$99.99","$9.9","$9","9999999","999999","99999"];
a.forEach(function(v, i){
console.log(v ,"-->", format(v) );
});
提供思路 :首先判断字符串长度>7 直接报错,然后把字符串拆分成一个个字符,假如每个字符不在有效字符内 也报错,合法字符后,先转成两位小数 之后判断有没有越界
function getPrice(v) {
if (!/[\d\.\$]/.test(v)) return 'error';//输入字符不在可用字符集内直接返回error
if (!/^\$?\d+(\.\d+)?$/.test(v)) return 'error';//格式错误
if (v.length > 7) return 'error';
v = v.replace(/\$/g, '');
var arr = v.split('.');
var num
if (arr.length == 1) {
num = parseInt(v);
if (num < 1000) return '$' + num.toFixed(2);
else {
num = parseInt(v.substring(0, v.length - 2));
if (num > 999) return 'error';
return '$' + parseFloat(arr[0] + '.' + v.substring(v.length - 2)).toFixed(2);
}
}
else {
if (parseInt(arr[0]) > 999) return 'error';
return '$' + arr[0] + '.' + (arr[1].length < 2 ? arr[1] + '0' : arr[1].substring(0, 2));
}
}
const inputStr = document.querySelector('input')
document.querySelector('#demo').innerHTML = inputStr.value
function myFunction() {
// 如果输入长度大于7直接return error
if (inputStr.value.length <= 7) {
let reg = /^[0-9\$\.]{1,7}$/;
// 判断字符是否合法
if (reg.test(inputStr.value)) {
// 不存在$,转换为Number类型,用toFixed(2)返回两位小数的字符串
if (inputStr.value.indexOf('$') == -1) {
const toNum = parseFloat(inputStr.value).toFixed(2)
console.log(toNum.length);
// 少了$,只有6位
if(toNum.length <= 6){
// 添加$
return document.querySelector('#demo').innerHTML = '$' + toNum
console.log(toNum);
}
// 存在$在第一位,用slice把除了第一位$,剩下截取
} else if (inputStr.value.indexOf('$') == 0) {
const toNum1 = parseFloat(inputStr.value.slice(1, inputStr.value.length)).toFixed(2);
console.log(toNum1);
// 少了$,只有6位
if(toNum1.length <= 6){
return document.querySelector('#demo').innerHTML = '$' + toNum1
console.log(toNum1);
}
}
// return document.querySelector('#demo').innerHTML = "error"
}
}
return document.querySelector('#demo').innerHTML = "error"
}
我也写出来了
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y