如何封装一个开发人员可自定义保留小数点后几位的正则表达式

新手上路,请多包涵

有个需求 就是基于element ,封装一个开发人员可以自定义保留几位小数的正则表达式
不知道咋写,如果有知道的大佬,希望能帮下忙,最好是能贴出代码哈~感激不尽!

这是我目前封装的手机号的正则表达式

var phone = (rule, value, callback) => {
  let regFormat = /^[1][3578][0-9]{9}$/;
  if (!value) {
    return callback(new Error('手机号不能为空'));
  }
  if (!(regFormat.test(value))) {
    callback(new Error('请输入正确手机号'));
  }

调用:

  rules: {
    phone: [{
        required: true,
        validator: phone,
    }],

能够按照这种格式封装开发人员可自定义保留小数点后几位的正则表达式吗

阅读 3.6k
4 个回答

保留小数点这种事用正则??效率多低啊。

@FX052 写的是用来判断小数点位数是否满足指定位数、而非将指定数字格式化成特定小数点位数。

这玩意儿写个扩展就好了:

/**
 * 使用去尾法来格式化一个数。
 * @param {Number} len 保留小数位数。
 * @returns {Number}
 */
Number.prototype.toFloor = function (len) {
    return Math.floor(this * Math.pow(10, len)) / Math.pow(10, len);
};

/**
 * 使用进一法来格式化一个数。
 * @param {Number} len 保留小数位数。
 * @returns {Number}
 */
Number.prototype.toCeil = function (len) {
    return Math.ceil(this * Math.pow(10, len)) / Math.pow(10, len);
};

/**
 * 使用四舍五入法法来格式化一个数。
 * @param {Number} len 保留小数位数。
 * @returns {Number}
 */
Number.prototype.toRound = function (len) {
    return Math.round(this * Math.pow(10, len)) / Math.pow(10, len);
};

用的时候直接:

let i = Math.PI;
console.log(i.toRound(4)); // 四舍五入保留4位小数

不想破坏原型链就抽出来自己做封装。

https://github.com/fudiwei/sk...

评论区 @君迹我心 提到了 Number.prototype.toFixed,这是 ES 中自带的原型方法,是一种基于银行家舍入规则的保留小数位法,跟数学意义上的四舍五入不太一样。具体含义可自行百度。

保留小数点位数为什么要正则啊?

// 小数位数最少min位  最多max位
const reg = (min,max)=>new RegExp('^\\d+\\.\\d{'+ min +','+max +'}$')

reg(1,5).test('1.12345') // true

正则细节还可以按需求自己调整

const f = (val, dig) => Number(val).toFixed(dig); // 会四舍五入
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题