源码讲解
/* 定义表单 */
const ezForm = reactive({
input: '',
})
// 总字符数
const totalChars = computed(() => ezForm.input.length)
// 总字节数
const totalBytes = computed(() => {
return Array.from(ezForm.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(() => ezForm.input.split('\n').length)
// 中文字符数
const chineseCharCount = computed(() => (ezForm.input.match(/[\u4E00-\u9FA5]/g) || []).length)
// 中文标点数
const chinesePunctuationCount = computed(() => (ezForm.input.match(/[\u3000-\u303F\uFF00-\uFFEF]/g) || []).length)
// 英文字符数
const englishCharCount = computed(() => (ezForm.input.match(/[a-z]/gi) || []).length)
// 英文标点数
const englishPunctuationCount = computed(() => (ezForm.input.match(/[.,!?;:'"]/g) || []).length)