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