当前位置: 首页 > article >正文

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


/**
 * 格式化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


http://www.kler.cn/a/535597.html

相关文章:

  • 记录一下 在Mac下用pyinstallter 打包 Django项目
  • mysql 数据导出到文件
  • react18新增了哪些特性
  • 107,【7】buuctf web [CISCN2019 华北赛区 Day2 Web1]Hack World
  • Hugging Face 的研究人员正致力于打造 OpenAI 深度研究工具的“开源版
  • 线程同步时定义 std::mutex 为什么要在前面添加 mutable 关键字
  • Debian安装Seafile
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之修改密码和个人资料
  • android 适配 api 35(android 15) 遇到的问题
  • 接雨水算法 思路讲解与拓展
  • python:csv文件批量导入mysql
  • 前端控制器模式
  • 【目标检测】模型验证:K-Fold 交叉验证
  • (算法竞赛)图论+DFS深搜——图的dfs遍历1
  • 大数据学习之Spark分布式计算框架RDD、内核进阶
  • 一文读懂:TCP网络拥塞的应对策略与方案
  • 风控系统指标版本管理,前端实现
  • sql版本序列号
  • Linux 源码编译安装httpd 2.4,提供系统服务管理脚本并测试
  • 在IDEA中高亮的注释
  • Ubuntu 上可以安装ms sqlserver?(不能上网2)
  • 数据结构:排序—插入排序(一)
  • React 中常见的Hooks,安排!
  • LabVIEW2025中文版软件安装包、工具包、安装教程下载
  • CAD导入与解析,助力工业数据可视化高效呈现
  • Java项目: 基于SpringBoot+mybatis+maven+mysql实现的装饰工程管理系统(含源码+数据库+毕业论文)