HarmonyOS CharUtil 字符检测工具:10 个方法全面解析字符类型
文章目录前言一、为什么需要字符检测工具二、CharUtil 依赖的底层 API三、10 个 API 逐一详解3.1 isDigit — 判断是否为数字3.2 isLetter — 判断是否为字母3.3 isLowerCase — 判断是否为小写字母3.4 isUpperCase — 判断是否为大写字母3.5 isSpaceChar — 判断是否为空格符3.6 isWhitespace — 判断是否为空白符3.7 isRTL — 判断是否为从右到左语言的字符3.8 isIdeograph — 判断是否为表意文字3.9 isBlankChar — 判断是否为空白符扩展版3.10 isAscii — 判断是否在 ASCII 范围内四、完整 Demo 演示4.1 字符检测核心逻辑4.2 字符类型智能判断4.3 检测结果 UI五、常见字符检测结果速查六、API 速查表七、小结前言近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓一、为什么需要字符检测工具在开发应用时经常需要判断字符类型例如表单验证密码是否包含大写字母输入过滤用户输入的是否全为数字国际化当前字符是否属于从右到左RTL的语言如阿拉伯语、希伯来语文本处理是否是中文汉字表意文字安全校验字符是否在 ASCII 范围内直接操作字符的 Unicode 码点比较繁琐CharUtil封装了 HarmonyOS 的i18n.Unicode模块提供了一系列开箱即用的字符检测方法。二、CharUtil 依赖的底层 APICharUtil基于kit.LocalizationKit中的i18n.Unicode模块import{i18n}fromkit.LocalizationKit;i18n.Unicode是 HarmonyOS 提供的 Unicode 字符工具能正确处理各种语言和字符集比 JavaScript 原生的charCodeAt在国际化场景下更加准确。三、10 个 API 逐一详解3.1 isDigit — 判断是否为数字staticisDigit(char:string):boolean{returni18n.Unicode.isDigit(char);}说明判断字符是否为数字0-9。示例CharUtil.isDigit(5)// trueCharUtil.isDigit(a)// falseCharUtil.isDigit(①)// trueUnicode 数字字符3.2 isLetter — 判断是否为字母staticisLetter(char:string):boolean{returni18n.Unicode.isLetter(char);}说明判断字符是否为字母包括中文、日文等各语言的字母字符。示例CharUtil.isLetter(A)// trueCharUtil.isLetter(字)// true汉字也是字母类字符CharUtil.isLetter(1)// falseCharUtil.isLetter( )// false3.3 isLowerCase — 判断是否为小写字母staticisLowerCase(char:string):boolean{returni18n.Unicode.isLowerCase(char);}说明仅对有大小写之分的字母如英文、德文变音字母等有效。示例CharUtil.isLowerCase(a)// trueCharUtil.isLowerCase(A)// falseCharUtil.isLowerCase(字)// false汉字没有大小写3.4 isUpperCase — 判断是否为大写字母staticisUpperCase(char:string):boolean{returni18n.Unicode.isUpperCase(char);}说明与isLowerCase相对应判断是否为大写字母。示例CharUtil.isUpperCase(A)// trueCharUtil.isUpperCase(a)// falseCharUtil.isUpperCase(Ü)// true德语大写 Ü3.5 isSpaceChar — 判断是否为空格符staticisSpaceChar(char:string):boolean{returni18n.Unicode.isSpaceChar(char);}说明判断字符是否为 Unicode 中定义的空格类字符包括普通空格 和全角空格 等。示例CharUtil.isSpaceChar( )// true普通空格CharUtil.isSpaceChar( )// true全角空格 U3000CharUtil.isSpaceChar(\t)// false制表符不是 space char3.6 isWhitespace — 判断是否为空白符staticisWhitespace(char:string):boolean{returni18n.Unicode.isWhitespace(char);}说明比isSpaceChar范围更广包括换行符\n、制表符\t、回车\r等控制字符。示例CharUtil.isWhitespace( )// trueCharUtil.isWhitespace(\t)// trueCharUtil.isWhitespace(\n)// trueCharUtil.isWhitespace(a)// false3.7 isRTL — 判断是否为从右到左语言的字符staticisRTL(char:string):boolean{returni18n.Unicode.isRTL(char);}说明RTLRight-To-Left如阿拉伯语、希伯来语等从右向左书写的语言字符。示例CharUtil.isRTL(ع)// true阿拉伯字母CharUtil.isRTL(A)// falseCharUtil.isRTL(字)// false应用场景支持阿拉伯语/希伯来语的国际化 App可通过此方法自动调整文本排列方向。3.8 isIdeograph — 判断是否为表意文字staticisIdeograph(char:string):boolean{returni18n.Unicode.isIdeograph(char);}说明表意文字主要指中文、日文汉字等 CJKChinese-Japanese-Korean字符。示例CharUtil.isIdeograph(字)// trueCharUtil.isIdeograph(あ)// false平假名不是表意文字CharUtil.isIdeograph(漢)// true繁体中文CharUtil.isIdeograph(A)// false应用场景判断用户输入的是否为中文做特殊处理如显示拼音注音。3.9 isBlankChar — 判断是否为空白符扩展版staticisBlankChar(c:number):boolean{returnCharUtil.isWhitespace(c.toString())||CharUtil.isSpaceChar(c.toString())||c0xFEFF||c0x202A||c0x0000;}参数字符的 Unicode 码点数字不是字符串说明在isWhitespace和isSpaceChar的基础上额外识别0xFEFFBOM字节顺序标记常见于文件开头0x202A从左到右嵌入控制字符0x0000空字符 NULL示例CharUtil.isBlankChar( .charCodeAt(0))// trueCharUtil.isBlankChar(0xFEFF)// trueBOMCharUtil.isBlankChar(A.charCodeAt(0))// false3.10 isAscii — 判断是否在 ASCII 范围内staticisAscii(char:string):boolean{if(char.length1){//确保输入的是单个字符returnchar.charCodeAt(0)128;}else{returnfalse;}}说明ASCII 范围是 0~127包含英文字母、数字、常见标点和控制字符。示例CharUtil.isAscii(A)// truecharCode 65CharUtil.isAscii(~)// truecharCode 126CharUtil.isAscii(字)// false超出 ASCII 范围CharUtil.isAscii(ab)// false多字符返回 false四、完整 Demo 演示来自CacheCharClickDemoPage.ets的 CharUtil 演示部分4.1 字符检测核心逻辑runCharCheck(){constinputthis.charInput;if(input.length0){this.charResults[];return;}constresults:CharCheckResult[][];for(leti0;iinput.length;i){constchinput.charAt(i);constcodech.charCodeAt(0);constitem:CharCheckResult{char:ch,results:[{method:isDigit,label:数字,result:CharUtil.isDigit(ch)},{method:isLetter,label:字母,result:CharUtil.isLetter(ch)},{method:isLowerCase,label:小写,result:CharUtil.isLowerCase(ch)},{method:isUpperCase,label:大写,result:CharUtil.isUpperCase(ch)},{method:isSpaceChar,label:空格符,result:CharUtil.isSpaceChar(ch)},{method:isWhitespace,label:空白符,result:CharUtil.isWhitespace(ch)},{method:isAscii,label:ASCII,result:CharUtil.isAscii(ch)},{method:isIdeograph,label:表意文字,result:CharUtil.isIdeograph(ch)},{method:isRTL,label:从右到左,result:CharUtil.isRTL(ch)},]};results.push(item);}this.charResultsresults;}对输入字符串的每个字符并行运行 9 个检测方法结果以绿色/灰色卡片形式展示。4.2 字符类型智能判断getCharType(ch:string):string{if(CharUtil.isDigit(ch))return数字;if(CharUtil.isLetter(ch))returnCharUtil.isUpperCase(ch)?大写字母:CharUtil.isLowerCase(ch)?小写字母:字母;if(CharUtil.isWhitespace(ch))return空白;if(CharUtil.isIdeograph(ch))return中文/汉字;if(CharUtil.isAscii(ch))returnASCII;return其他;}优先级从高到低数字 字母进一步区分大小写 空白 中文 ASCII 其他4.3 检测结果 UIForEach(this.charResults,(cr:CharCheckResult){Column(){Row(){Text(${cr.char}).fontSize(20).fontWeight(FontWeight.Bold).fontColor(#1a1a1a)Text(U${cr.char.charCodeAt(0).toString(16).toUpperCase().padStart(4,0)}).fontSize(11).fontColor(#AAA).margin({left:8}).fontFamily(monospace)Blank()Text(this.getCharType(cr.char)).fontSize(12).fontColor(#4080FF).fontWeight(FontWeight.Medium)}.width(100%).margin({bottom:6})Flex({wrap:FlexWrap.Wrap}){ForEach(cr.results,(r:CharResultItem){Column(){Text(r.label).fontSize(10).fontColor(r.result?#FFF:#AAA)Text(r.result?✅:❌).fontSize(13).fontColor(r.result?#FFF:#CCC)}.padding({top:4,bottom:4,left:8,right:8}).backgroundColor(r.result?#00C853:#F0F0F0).borderRadius(6).margin({right:6,bottom:4})},(r:CharResultItem)r.method)}}.width(100%).padding(10).backgroundColor(#F5F6FA).borderRadius(8).margin({bottom:6})},(cr:CharCheckResult)cr.char)每个字符显示其 Unicode 码点如U0041对应A以及 9 个检测结果的彩色标签。五、常见字符检测结果速查字符isDigitisLetterisLowerCaseisUpperCaseisAsciiisIdeographA❌✅❌✅✅❌a❌✅✅❌✅❌5✅❌❌❌✅❌字❌✅❌❌❌✅❌❌❌❌✅❌ع❌✅❌❌❌❌六、API 速查表方法参数说明isDigit(ch)string是否为数字字符0-9 及 Unicode 数字isLetter(ch)string是否为字母含各语言字母isLowerCase(ch)string是否为小写字母isUpperCase(ch)string是否为大写字母isSpaceChar(ch)string是否为空格符含全角空格isWhitespace(ch)string是否为空白符含制表符/换行符isRTL(ch)string是否为从右到左语言字符isIdeograph(ch)string是否为表意文字中文/日文汉字isBlankChar(code)number是否为空白符码点扩展版isAscii(ch)string是否在 ASCII 范围内 128七、小结CharUtil将i18n.Unicode的底层 API 封装为直观的静态方法适合以下场景表单验证isDigitisLetterisUpperCase组合验证密码强度中文检测isIdeograph判断是否包含汉字国际化布局isRTL判断是否需要 RTL 布局输入过滤isWhitespaceisBlankChar过滤各类空白字符与 JavaScript 原生的charCodeAt相比CharUtil基于 Unicode 标准能正确处理多语言字符是 HarmonyOS 国际化应用开发的利器。