当前位置: 首页 > news >正文

HarmonyOS 表单验证入门:用 RegexUtil 一行代码搞定手机号和邮箱验证

文章目录

    • 背景
      • 方法总览
      • isPhone:手机号验证
      • 在表单里用 isPhone
      • isEmail:邮箱验证
      • Demo 中的输入框绑定方式
      • 常见验证需求对应方法速查
      • isDigits:纯数字验证
      • isEmoji:表情符号检测
      • 写在最后

背景

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓
做 HarmonyOS 应用,登录注册页面的表单验证是逃不掉的。手机号格式对不对?邮箱地址合不合法?自己写正则既麻烦又容易出错。

RegexUtil提供了开箱即用的验证方法,isPhone("13800138000")一行代码搞定,比自己写正则省事多了。

方法总览


isPhone:手机号验证

中国大陆手机号的格式:11位数字,以 1 开头,第二位是 3-9 之间的数字。

// Demo 代码this.Btn('isPhone() 验证','#4A90E2',()=>{this.addLog(`isPhone("${this.inputPhone}") →${RegexUtil.isPhone(this.inputPhone)}`);})this.Btn('isPhone("13800138000") ✓','#4A90E2',()=>{this.addLog(`isPhone("13800138000") →${RegexUtil.isPhone('13800138000')}`);})this.Btn('isPhone("12345") ✗','#7FB3F5',()=>{this.addLog(`isPhone("12345") →${RegexUtil.isPhone('12345')}`);})

实际运行结果

  • isPhone("13800138000")true(正确的手机号)
  • isPhone("12345")false(太短,格式不对)
  • isPhone("19900001234")true(199 号段也支持)
  • isPhone("20000138000")false(不是以 1 开头)

在表单里用 isPhone

实际项目里,手机号验证通常绑定在输入框的变化事件和提交按钮上:

@Statephone:string='';@StatephoneError:string='';// 输入框TextInput({text:this.phone,placeholder:'请输入手机号'}).width('100%').height(40).fontSize(13).inputFilter('[0-9]')// 只允许输入数字.maxLength(11).onChange(v=>{this.phone=v;// 输入满 11 位时实时验证if(v.length===11){this.phoneError=RegexUtil.isPhone(v)?'':'手机号格式不正确';}else{this.phoneError='';}})// 错误提示if(this.phoneError!==''){Text(this.phoneError).fontSize(12).fontColor('#E74C3C')}// 提交按钮验证Button('提交').onClick(()=>{if(!RegexUtil.isPhone(this.phone)){this.phoneError='请输入正确的手机号';return;}// 继续提交逻辑})

isEmail:邮箱验证

邮箱格式规则比手机号复杂一些,但isEmail封装好了:

this.Btn('isEmail() 验证输入','#27AE60',()=>{this.addLog(`isEmail("${this.inputEmail}") →${RegexUtil.isEmail(this.inputEmail)}`);})this.Btn('isEmail("user@qq.com") ✓','#27AE60',()=>{this.addLog(`isEmail("user@qq.com") →${RegexUtil.isEmail('user@qq.com')}`);})this.Btn('isEmail("not-an-email") ✗','#58D68D',()=>{this.addLog(`isEmail("not-an-email") →${RegexUtil.isEmail('not-an-email')}`);})

实际运行结果

  • isEmail("test@example.com")true
  • isEmail("user@qq.com")true
  • isEmail("user+tag@gmail.com")true(带+号的邮箱也支持)
  • isEmail("not-an-email")false(没有@
  • isEmail("user@")false@后面没有域名)
  • isEmail("@example.com")false@前面没有用户名)

Demo 中的输入框绑定方式

Demo 里的 TextInput 和按钮结合方式很典型,值得学:

@StateinputPhone:string='13800138000';@StateinputEmail:string='test@example.com';// 手机号输入区this.SectionTitle('isPhone(phone) 手机号验证')TextInput({text:this.inputPhone,placeholder:'输入手机号'}).width('100%').height(40).fontSize(13).onChange(v=>{this.inputPhone=v;})this.Btn('isPhone() 验证','#4A90E2',()=>{this.addLog(`isPhone("${this.inputPhone}") →${RegexUtil.isPhone(this.inputPhone)}`);})// 邮箱输入区this.SectionTitle('isEmail(content) 邮箱验证')TextInput({text:this.inputEmail,placeholder:'输入邮箱'}).width('100%').height(40).fontSize(13).onChange(v=>{this.inputEmail=v;})this.Btn('isEmail() 验证输入','#27AE60',()=>{this.addLog(`isEmail("${this.inputEmail}") →${RegexUtil.isEmail(this.inputEmail)}`);})

@State绑定输入框的值,点击验证按钮时直接使用 state 里的值——这是 ArkTS 响应式绑定的标准用法。

常见验证需求对应方法速查

验证需求方法
中国大陆手机号RegexUtil.isPhone(str)
邮箱地址RegexUtil.isEmail(str)
18位身份证RegexUtil.isValidCard(str)(下一篇详解)
纯数字RegexUtil.isDigits(str)
含表情符号RegexUtil.isEmoji(str)
IP地址RegexUtil.isMatch(str, RegexUtil.REG_IPV4)

isDigits:纯数字验证

顺带一提,isDigits检查字符串是否全为数字,常用于验证短信验证码、订单号等:

this.Btn('isDigits("12345") ✓','#9B59B6',()=>{this.addLog(`isDigits("12345") →${RegexUtil.isDigits('12345')}`);})this.Btn('isDigits("12a45") ✗','#9B59B6',()=>{this.addLog(`isDigits("12a45") →${RegexUtil.isDigits('12a45')}`);})this.Btn('isDigits("") 空串 ✗','#8E44AD',()=>{this.addLog(`isDigits("") →${RegexUtil.isDigits('')}`);})

实际运行结果

  • isDigits("12345")true
  • isDigits("12a45")false(包含字母)
  • isDigits("")false(空字符串不算纯数字)

isEmoji:表情符号检测

聊天应用里有时需要检测输入是否包含 emoji,禁止某些场景下输入 emoji:

this.Btn('isEmoji("Hello😊") ✓','#F39C12',()=>{this.addLog(`isEmoji("Hello😊") →${RegexUtil.isEmoji('Hello😊')}`);})this.Btn('isEmoji("Hello World") ✗','#F39C12',()=>{this.addLog(`isEmoji("Hello World") →${RegexUtil.isEmoji('Hello World')}`);})

实际运行结果

  • isEmoji("Hello😊")true(包含 emoji)
  • isEmoji("Hello World")false(没有 emoji)

写在最后

isPhoneisEmail是日常开发里用得最多的两个方法。直接用,不用自己写正则,减少错误,提高效率。

下一篇聊isValidCard身份证验证,以及isMatch配合内置正则常量的各种验证场景。

http://www.cnnetsun.cn/news/2635029.html

相关文章:

  • COM3D2 MaidFiddler终极指南:掌握实时角色编辑核心技术
  • 3分钟告别城通网盘限速:ctfileGet直连解析工具高效使用指南
  • 从Gaea到Houdini:如何将你的程序化地形无缝导入游戏引擎工作流?
  • BBDown命令行工具:高效下载B站视频的完整指南
  • 三步搞定LogicFlow流程图框架:从零构建企业级可视化应用的终极指南
  • 魔兽争霸3终极优化指南:专业工具让传统游戏焕发新生
  • 数据平权:医疗与社交数据同权保护下的行业变革与挑战
  • Raw Accel终极鼠标加速指南:7种曲线类型让你的游戏体验飞升
  • OBS-RTSPServer插件:5分钟实现专业级RTSP直播部署方案
  • 新手入门CTF Web安全:从CTFShow签到题到SQL注入实战(附详细解题思路)
  • MiniCPM-V-4.6-Thinking-AWQ视频分析完全教程:从零开始实现智能视频理解
  • AI for Social Good实践指南:应对数据偏见、普及门槛与规模化挑战
  • 【字节跳动】甘肃庆阳东数西算算力中心
  • 别再乱拔了!移动硬盘盘符从F变E的保姆级修复教程(附磁盘管理工具详解)
  • 新时代的华侨代表—黄爽 从跨境法务精英到文化使者
  • GLM-4.5模型参数详解:配置文件关键参数调优指南
  • 从数据库表关联到社交网络:用Python代码图解离散数学中的‘关系’
  • 不只是游戏卡:用Intel Arc A770在Linux上跑AI推理,性能实测与OpenVINO部署心得
  • ncmdump终极教程:5分钟掌握网易云NCM音乐解密技巧
  • 社区贡献指南:如何为MYTHOS-26B-A4B-PRISM-PRO-DQ项目提供反馈与改进建议
  • GHelper终极指南:华硕笔记本硬件控制的轻量化革命
  • DriverStore Explorer终极指南:3步快速清理Windows驱动,轻松释放20GB系统空间
  • C51函数参数传递机制与优化实践
  • 基于Arduino的智能安防巡逻机器人:从传感器集成到自主决策
  • 如何用KeymouseGo鼠标键盘自动化工具彻底告别重复性工作
  • MinerU2.5-Pro实战教程:从PDF到Markdown的完整文档转换流程
  • 终极Minecraft区块编辑器指南:MCA Selector新手快速上手教程
  • DeepSeek-Reasonix 基准测试解读:τ-bench-lite 性能数据深度分析
  • 如何利用distilbert-base-multilingual-cased-sentiment实现电商评论情感分析:从安装到实战的完整指南
  • UnrealPakViewer:虚幻引擎Pak文件分析的终极可视化解决方案