EzDev

字符统计工具

输入文本后即时查看字符数、行数、中英文字符及标点数量,支持统计结果复制与下载;字节数为工具的近似估算。
输入内容后会即时统计字符、字节、行数和标点数量

总字符数

0

总字节数

0

行数

1

中文字符

0

中文标点

0

英文字符

0

英文标点数

0

使用方法

输入文本后即时查看字符、行数、中英文字符和标点数量,使用快捷操作复制或下载统计结果。文本在浏览器本地统计。

统计规则

总字符数使用 JavaScript 字符串长度,Emoji 等字符可能计为多个 UTF-16 单元。行数按换行符分割,因此空输入显示 1 行。字节数为近似估算,不适合作为文件大小或 UTF-8 字节数的精确依据。

技术参考

/* 定义表单 */
const state = reactive({
  input: '',
})

// 总字符数
const totalChars = computed(() => state.input.length)

// 总字节数
const totalBytes = computed(() => {
  return Array.from(state.input).reduce((count: number, char: string) => {
    // 对于每个字符,使用encodeURI进行编码,然后根据编码后的长度来判断
    // 如果是多字节字符(如中文),encodeURI后的长度会明显大于1
    // 这里简化处理:英文等单字节字符计为1,其他多字节字符计为3
    return count + (encodeURI(char).length > 1 ? 3 : 1)
  }, 0) // 初始值设置为0,明确指定累加器的类型为number
})

// 行数
const lineCount = computed(() => state.input.split('\n').length)

// 中文字符数
const chineseCharCount = computed(() => (state.input.match(/[\u4E00-\u9FA5]/g) || []).length)

// 中文标点数
const chinesePunctuationCount = computed(() => (state.input.match(/[\u3000-\u303F\uFF00-\uFFEF]/g) || []).length)

// 英文字符数
const englishCharCount = computed(() => (state.input.match(/[a-z]/gi) || []).length)

// 英文标点数
const englishPunctuationCount = computed(() => (state.input.match(/[.,!?;:'"]/g) || []).length)