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 依赖的底层 API
CharUtil基于@kit.LocalizationKit中的i18n.Unicode模块:
import{i18n}from'@kit.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('①')// true(Unicode 数字字符)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(全角空格 U+3000)CharUtil.isSpaceChar('\t')// false(制表符不是 space char)3.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);}说明:RTL(Right-To-Left),如阿拉伯语、希伯来语等从右向左书写的语言字符。
示例:
CharUtil.isRTL('ع')// true(阿拉伯字母)CharUtil.isRTL('A')// falseCharUtil.isRTL('字')// false应用场景:支持阿拉伯语/希伯来语的国际化 App,可通过此方法自动调整文本排列方向。
3.8 isIdeograph — 判断是否为表意文字
staticisIdeograph(char:string):boolean{returni18n.Unicode.isIdeograph(char);}说明:表意文字主要指中文、日文汉字等 CJK(Chinese-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())||c===0xFEFF||c===0x202A||c===0x0000;}参数:字符的 Unicode 码点(数字),不是字符串
说明:在isWhitespace和isSpaceChar的基础上,额外识别:
0xFEFF:BOM(字节顺序标记),常见于文件开头0x202A:从左到右嵌入控制字符0x0000:空字符 NULL
示例:
CharUtil.isBlankChar(' '.charCodeAt(0))// trueCharUtil.isBlankChar(0xFEFF)// true(BOM)CharUtil.isBlankChar('A'.charCodeAt(0))// false3.10 isAscii — 判断是否在 ASCII 范围内
staticisAscii(char:string):boolean{if(char.length===1){//确保输入的是单个字符returnchar.charCodeAt(0)<128;}else{returnfalse;}}说明:ASCII 范围是 0~127,包含英文字母、数字、常见标点和控制字符。
示例:
CharUtil.isAscii('A')// true(charCode = 65)CharUtil.isAscii('~')// true(charCode = 126)CharUtil.isAscii('字')// false(超出 ASCII 范围)CharUtil.isAscii('ab')// false(多字符返回 false)四、完整 Demo 演示
来自CacheCharClickDemoPage.ets的 CharUtil 演示部分:
4.1 字符检测核心逻辑
runCharCheck(){constinput=this.charInput;if(input.length===0){this.charResults=[];return;}constresults:CharCheckResult[]=[];for(leti=0;i<input.length;i++){constch=input.charAt(i);constcode=ch.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.charResults=results;}对输入字符串的每个字符,并行运行 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))return'ASCII';return'其他';}优先级从高到低:数字 > 字母(进一步区分大小写)> 空白 > 中文 > ASCII > 其他
4.3 检测结果 UI
ForEach(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 码点(如U+0041对应A),以及 9 个检测结果的彩色标签。
五、常见字符检测结果速查
| 字符 | isDigit | isLetter | isLowerCase | isUpperCase | isAscii | isIdeograph |
|---|---|---|---|---|---|---|
A | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ |
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 封装为直观的静态方法,适合以下场景:
- 表单验证:
isDigit+isLetter+isUpperCase组合验证密码强度 - 中文检测:
isIdeograph判断是否包含汉字 - 国际化布局:
isRTL判断是否需要 RTL 布局 - 输入过滤:
isWhitespace+isBlankChar过滤各类空白字符
与 JavaScript 原生的charCodeAt相比,CharUtil基于 Unicode 标准,能正确处理多语言字符,是 HarmonyOS 国际化应用开发的利器。
