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

微信小程序功能 表单密码强度验证

一、页面展示与交互功能

表单提交与验证(含密码强度验证)

实现带密码强度验证的表单提交功能,使用正则表达式检查密码复杂度:

<form bindsubmit="submitForm"><input name="username" placeholder="请输入用户名" /><input name="password" placeholder="请输入密码" type="password" bindinput="checkPasswordStrength" /><!-- 密码强度提示 --><view class="password-strength">密码强度:{{passwordStrength}}</view><button form-type="submit">提交</button>
</form>
Page({data: {passwordStrength: '未输入'},// 实时检查密码强度checkPasswordStrength(e) {const password = e.detail.value;let strength = '弱'; // 默认弱// 密码强度正则规则:// 1. 长度至少8位// 2. 包含数字// 3. 包含小写字母// 4. 包含大写字母// 5. 包含特殊字符(!@#$%^&*)const lengthRule = /.{8,}/;const hasNumber = /\d/;const hasLowercase = /[a-z]/;const hasUppercase = /[A-Z]/;const hasSpecial = /[!@#$%^&*]/;// 验证规则并计算强度等级let score = 0;if (lengthRule.test(password)) score++;if (hasNumber.test(password)) score++;if (hasLowercase.test(password)) score++;if (hasUppercase.test(password)) score++;if (hasSpecial.test(password)) score++;// 根据得分设置强度描述if (password.length === 0) {strength = '未输入';} else if (score < 2) {strength = '弱(至少8位,包含数字和字母)';} else if (score < 4) {strength = '中(建议增加大小写字母组合)';} else {strength = '强';}this.setData({ passwordStrength: strength });},submitForm(e) {const formData = e.detail.value;// 用户名验证if (!formData.username) {wx.showToast({title: '用户名不能为空',icon: 'none'});return;}// 密码验证if (!formData.password) {wx.showToast({title: '密码不能为空',icon: 'none'});return;}// 密码强度最终验证const strongPasswordRule = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{8,}$/;if (!strongPasswordRule.test(formData.password)) {wx.showToast({title: '密码需8位以上,包含数字、大小写字母和特殊字符',icon: 'none'duration: 3000});return;}// 验证通过,提交表单wx.request({url: 'https://api.example.com/register',method: 'POST',data: formData,success: (res) => {if (res.data.success) {wx.showToast({ title: '注册成功' });} else {wx.showToast({title: '注册失败',icon: 'none'});}}});}
})

密码强度验证规则说明:

基础要求:至少8位长度

中级要求:包含数字、小写字母、大写字母中的至少两种

高级要求:同时包含数字、小写字母、大写字母和特殊字符(!@#$%^&*)

实时反馈:随着用户输入实时更新密码强度提示

提交验证:最终提交时强制检查是否符合高级要求

http://www.xdnf.cn/news/1265077.html

相关文章:

  • 从浅拷贝到深拷贝:C++赋值运算符重载的核心技术
  • v-model双向绑定指令
  • Selenium + Python + Pytest + Yaml + POM
  • Linux网络--2、Socket编程
  • 自由学习记录(79)
  • Pytest项目_day08(setup、teardown前置后置操作)
  • NY128NY133美光固态闪存NY139NY143
  • No time to train! Training-Free Reference-Based Instance Segmentation之论文阅读
  • 笔试——Day32
  • 【ros-humble】2.自定义通讯接口发布者python,qt使用(话题)
  • 使用 ast-grep 精准匹配指定类的方法调用(以 Java 为例)
  • V4L2摄像头采集 + WiFi实时传输实战全流程
  • 汇编语言和高级语言的差异
  • 【从0到1制作一块STM32开发板】6. PCB布线--信号部分
  • 【ESP32-menuconfig(1) -- Build Type及Bootloader config】
  • FreeRTOS入门知识(初识RTOS)(一)
  • WinForm 实战 (进度条):用 ProgressBar+Timer 打造动态进度展示功能
  • BBH详解:面向大模型的高阶推理评估基准与数据集分析
  • TyDi QA:面向语言类型多样性的信息检索问答基准
  • 柠檬笔试——野猪骑士
  • Python的七大框架对比分析
  • 若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用
  • Day01 项目概述,环境搭建
  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 【Nginx基础①】 | VS Code Remote SSH 环境下的静态资源与反向代理配置实践
  • 防御保护09
  • 【Unity3D实例-功能-跳跃】角色跳跃
  • 文件结构树的├、└、─ 符号
  • 机器学习及其KNN算法
  • 力扣 hot100 Day69