pinyin.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. *中文转拼音帮助类
  3. * 推荐使用指令[v-pinyin ]进行中文转拼音
  4. * <pre>
  5. * 作者:hugh zhuang
  6. * 邮箱:3378340995@qq.com
  7. * 日期:2018-10-08-下午3:29:34
  8. * 版权:广州流辰信息技术有限公司
  9. * </pre>
  10. */
  11. import { camelCase } from 'lodash'
  12. import pinyin4js from 'pinyin4js'
  13. /**
  14. * 中文转拼音
  15. *
  16. * @param {*} obj 转换的对象
  17. * @param {*} options 参数
  18. * name:要转换的拼音的key,默认是name
  19. * key:转换后的拼音的key,默认是key
  20. * format:转换的格式:
  21. * WITH_TONE_MARK: "WITH_TONE_MARK", //带声调
  22. * WITHOUT_TONE: "WITHOUT_TONE", //不带声调
  23. * WITH_TONE_NUMBER: "WITH_TONE_NUMBER", //数字代表声调
  24. * FIRST_LETTER: "FIRST_LETTER" //首字母风格 【默认】
  25. * separator:字符间的分隔符
  26. * notEmpty: 不为空转换
  27. * filterSpecial:过滤特殊字符
  28. */
  29. export default function(obj, options = {}) {
  30. options.name = options.name || 'name'
  31. options.key = options.key || 'key'
  32. options.notEmpty = options.notEmpty || true // 不为空转换
  33. if (options.notEmpty && obj[options.key] !== '') { return }
  34. const value = obj[options.name]
  35. if (value === '' || value == null || value === undefined) { return }
  36. obj[options.key] = convertToPinyin(value, options)
  37. }
  38. /**
  39. * 数据直接转换拼音
  40. * @param {*} value 转换值
  41. * @param {*} options 参数
  42. */
  43. export const convertToPinyin = function(value, options = {}) {
  44. if (value === '' || value == null || value === undefined) { return }
  45. options.name = options.name || 'name'
  46. options.key = options.key || 'key'
  47. options.format = options.format || pinyin4js.FIRST_LETTER
  48. options.camelCase = options.camelCase || false // 驼峰
  49. options.separator = options.separator || (options.camelCase ? ' ' : '')// 分隔符
  50. options.filterSpecial = options.filterSpecial || true // 过滤特殊字符
  51. options.separatorEnd = options.separatorEnd || false // 最后加分隔符
  52. // 过滤特殊字符
  53. if (options.filterSpecial) {
  54. value = stripSpechars(value)
  55. }
  56. let v = pinyin4js.convertToPinyinString(value, options.separator, options.format)
  57. if (options.camelCase) { // 驼峰
  58. v = camelCase(v)
  59. }
  60. if (options.separatorEnd) { // 最后加分隔符
  61. v = v + options.separator
  62. }
  63. return v
  64. }
  65. /**
  66. * 过滤特殊字符
  67. * @param {*} s 要过滤的字符串
  68. */
  69. export const stripSpechars = function(s) {
  70. const pattern = new RegExp("[\\\\`~!@#$^&*%()=_\\-|{}':;',\\[\\].<>/?~!@#¥……&*();—+|{}【】{}《》\"‘’;:”“'。,、?]")
  71. let rs = ''
  72. for (let i = 0; i < s.length; i++) {
  73. rs = rs + s.substr(i, 1).replace(pattern, '')
  74. }
  75. return rs
  76. }