JSON.stringify()和JSON.parse()不能转换RegExp正则的问题

前言

有一个对象如{ formData: { name: '', phone: '' },regList: { phone: [{ pattern: "/^1(3|4|5|6|7|8|9)\d{9}$/", message: '手机号格式错误' }] }}JSON.stringfit()转json字符串的时候发现转成了{ formData: { name: '', phone: '' },regList: { phone: [{ pattern: {}, message: '手机号格式错误' }] }}把正则转成了空对象,以至于用JSON.parse()时,发现把正则数据丢失了

原因

JSON.stringify会处理的几种类型: String, Number, Boolean, null, Array, Object
不会处理的几种类型: Date, RegExp, undefined, Function

解决方法

JSON.stringify()

/**
 * json对象转json字符串
 * @param { Object } json json对象
 */
export function stringifyJson(json){
  return JSON.stringify(json, (k, v) => {
    // 将正则对象转换为正则字符串
    if(v instanceof RegExp){
      return v.toString();
    }
    return v;
  });
}

JSON.parse()

/**
 * json字符串转json对象
 * @param { String } jsonStr json字符串
 */
export function parseJson(jsonStr){
  return JSON.parse(jsonStr, (k, v) => {
    try{
      // 将正则字符串转成正则对象
      if (eval(v) instanceof RegExp) {
        return eval(v);
      }
    }catch(e){ // nothing

    }
    return v;
  });
}

转载于https://blog.csdn.net/weixin_46656983/article/details/107188175