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

相关推荐
he___H2 分钟前
基于LCEL的联想
开发语言·python·langchain
L-影6 分钟前
FastAPI CORS 跨域:Web 世界的“小区门禁”与“访客通行证”
前端·javascript·fastapi
stereohomology12 分钟前
已进入初赛提交Demo的两个项目:(2)单独html钢琴
前端·html·why不coding
阿pin15 分钟前
Android随笔-神经系统Handler
android·java·开发语言·handler
源图客19 分钟前
Claude Code基础使用
服务器·前端·数据库
布朗克16823 分钟前
Go 入门到精通-09-复合类型之Map
开发语言·后端·golang·map
zh_xuan24 分钟前
c++ Expected用法
开发语言·c++·expected
ch.ju25 分钟前
Java程序设计(第3版)第四章——final修饰的方法和类
java·开发语言
asdzx6734 分钟前
在 React 中轻松实现 PDF 转 Word:纯前端 WASM 方案实战
前端·react.js·pdf