JS:将JS对象格式化为php语法形式(完美支持无unicode编码匹配的正则)

javascript 复制代码
/**
 * 格式化Object数据为php语法形式
 * @param {*} obj 任意数据
 * @param {String} spaceLen 缩略符长度:必须在2~65536之间,否则默认为2
 * @return {String} 格式化后的PHP语法字符串
 */
function formatToPhp(obj, spaceLen) {
  formatToPhp = function (obj, spaceLen) {
    const space =
      spaceLen >= 2 && spaceLen <= 65536 ? ' '.repeat(spaceLen) : '  '
    return formatToPhp.fn(obj, '', (formatToPhp.space = space))
  }
  formatToPhp.toStr = function (scalar) {
    scalar = JSON.stringify(scalar).split('\'').join('\\\'')
    return '\'' + scalar.slice(1, -1) + '\''
  }
  formatToPhp.fn = function (obj, minSpace, maxSpace) {
    const t = typeof obj
    if (t === 'object') {
      const nextSpace = maxSpace + this.space
      switch (Object.prototype.toString.call(obj)) {
        case '[object Array]':
          return obj.length === 0
            ? '[]'
            : `[\n${maxSpace}${obj.map((item) => this.fn(item, maxSpace, nextSpace)).join(`,\n${maxSpace}`)}\n${minSpace}]`
        case '[object Object]':
          const keys = Object.keys(obj)
          return keys.length === 0
            ? '[]'
            : `[\n${keys.map((key) => maxSpace + this.toStr(key) + ' => ' + this.fn(obj[key], maxSpace, nextSpace)).join(',\n')}\n${minSpace}]`
        case '[object RegExp]':
          return '\'' + (obj + '').split('\'').join('\\\'') + '\''
      }
      return null
    } else if (t === 'string') return this.toStr(obj)
    return t === 'function' ? 'function(){}' : JSON.stringify(obj) || null
  }
  return formatToPhp(obj, spaceLen)
}

注意:正则在匹配unicode编码时需要手动修改。例如:

JS正则:/[\u4e00-\u9fa5]+/

PHP正则:/[\x{4e00}-\x{9fa5}]+/u

相关推荐
共享家95275 小时前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
疯狂的喵5 小时前
C++编译期多态实现
开发语言·c++·算法
2301_765703145 小时前
C++中的协程编程
开发语言·c++·算法
m0_748708055 小时前
实时数据压缩库
开发语言·c++·算法
lly2024066 小时前
jQuery Mobile 表格
开发语言
惊讶的猫6 小时前
探究StringBuilder和StringBuffer的线程安全问题
java·开发语言
Halo_tjn6 小时前
基于封装的专项 知识点
java·前端·python·算法
m0_748233177 小时前
30秒掌握C++核心精髓
开发语言·c++
摘星编程7 小时前
OpenHarmony环境下React Native:自定义useTruncate文本截断
javascript·react native·react.js
Fleshy数模7 小时前
从数据获取到突破限制:Python爬虫进阶实战全攻略
java·开发语言