密码强度检查
一、前端检查 案例
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > <html> <head> <title> 密码强度检测 </title> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" > <style type= "text/css" > input{float: left; font-size: 14px; width: 250px; height: 25px; border: 1px solid #ccc; padding-left: 10px;} #tips{float: left; font-size: 12px; width: 400px; height: 25px; margin: 4px 0 0 20px;} #tips span{float: left; width: 40px; height: 20px; color: #fff; overflow:hidden; margin-right: 10px; background: #D7D9DD; line-height:20px; text-align: center; } #tips .s1{background: #F45A68;}/*红色*/ #tips .s2{background: #fc0;}/*橙色*/ #tips .s3{background: #cc0;}/*黄色*/ #tips .s4{background: #14B12F;}/*绿色*/ </style> </head> <body> <input type= "text" id= "password" value= "" maxlength= "16" /> <div id= "tips" > <span>弱</span> <span>中</span> <span>强</span> <span>很强</span> </div> </body> <script type= "text/javascript" > var password = document.getElementById( "password" ); //获取文本框的对象 //var value = password.value; //获取用户在文本框里面填写的值 //获取所有的span标签 返回值是一个数组 var spanDoms = document.getElementsByTagName( "span" ); password.onkeyup = function (){ //获取用户输入的密码,然后判断其强度 返回0 或者 1 2 3 4 var index = checkPassWord( this .value); for ( var i = 0; i <spanDoms.length; i++){ spanDoms[i].className = "" ; //清空span标签所有的class样式 if (index){ //0 代表false 其余代表true spanDoms[index-1].className = "s" + index ; } } } //校验密码强度 function checkPassWord(value){ // 0: 表示第一个级别 1:表示第二个级别 2:表示第三个级别 // 3: 表示第四个级别 4:表示第五个级别 var modes = 0; if (value.length < 6){ //最初级别 return modes; } if (/\d/.test(value)){ //如果用户输入的密码 包含了数字 modes++; } if (/[a-z]/.test(value)){ //如果用户输入的密码 包含了小写的a到z modes++; } if (/[A-Z]/.test(value)){ //如果用户输入的密码 包含了大写的A到Z modes++; } if (/\W/.test(value)){ //如果是非数字 字母 下划线 modes++; } switch (modes){ case 1 : return 1; break ; case 2 : return 2; break ; case 3 : return 3; break ; case 4 : return 4; break ; } } </script> </html> |
二、后端检查案例
https://blog.csdn.net/u010156024/article/details/45673581
三、vue专项检查案例
http://www.datouwang.com/jiaoben/973.html
主要代码:
/* DaTouWang URL: www.datouwang.com */ var app = new Vue({ el: "#app" , data: { password: null , password_length: 0, typed: false , contains_lovercase: false , contains_number: false , contains_uppercase: false , valid_password_length: false , valid_password: false }, methods: { p_len: function () { this .password_length = this .password.length; if ( this .password_length > 7) { this .valid_password_length = true ; } else { this .valid_password_length = false ; } if ( this .password_length > 0) { this .typed = true ; } else { this .typed = false ; } this .contains_lovercase = /[a-z]/.test( this .password); this .contains_number = /\d/.test( this .password); this .contains_uppercase = /[A-Z]/.test( this .password); // Check if the password is valid if ( this .contains_lovercase == true && this .contains_number == true ) { this .valid_password = false ; if ( this .contains_uppercase == true && this .valid_password_length == true ) this .valid_password = true ; } else { this .valid_password = false ; } } } }); |
四、vue实际应用:
<style lang= "css" scoped> #tips{float: left; font-size: 12px; width: 400px; height: 25px; margin: 4px 0 0 20px;} #tips span{float: left; width: 40px; height: 20px; color: #fff; overflow:hidden; margin-right: 10px; background: #D7D9DD; line-height:20px; text-align: center; } #tips .s1{background: #F45A68;}/*红色*/ #tips .s2{background: #fc0;}/*橙色*/ #tips .s3{background: #cc0;}/*黄色*/ #tips .s4{background: #14B12F;}/*绿色*/ </style> <template> <div> <!-- <sticky class -name= "sub-navbar white" > <el-button style= "margin:5px 10px;float:left" type= "text" icon= "el-icon-arrow-left" @click= "handleReturn" >返回</el-button> </sticky> --> <div style= "padding:20px 20px 20px 20px;width:500px;" > <div> <el-form ref= "dataForm" :rules= "rules" :model= "temp" label-position= "right" label-width= "120px" size= "small" > <el-form-item label= "用户名:" prop= "UserName" > <span>{{ temp.UserName }}</span> </el-form-item> <el-form-item label= "职位/职称:" prop= "Position" > <el-input v-model= "temp.Position" :maxlength= "20" /> </el-form-item> <el-form-item label= "固定电话:" prop= "TelPhone" > <el-input v-model= "temp.TelPhone" :maxlength= "20" /> </el-form-item> <el-form-item label= "手机:" prop= "Phone" > <el-input v-model= "temp.Phone" :maxlength= "20" /> </el-form-item> <el-form-item label= "邮件:" prop= "Email" > <el-input v-model= "temp.Email" :maxlength= "50" /> </el-form-item> <el-form-item> <el-button type= "primary" size= "small" @click= "dialogFormVisible = true" >{{ someWord.changePassword }}</el-button> <el-button type= "primary" @click= "submitForm()" >保存</el-button> </el-form-item> </el-form> </div> </div> <el-dialog :title= "someWord.changePassword" :visible.sync= "dialogFormVisible" :close-on-click-modal= "false" width= "400px" > <el-form ref= "formPassword" :rules= "formPasswordRules" :model= "formPassword" label-position= "right" label-width= "100px" size= "small" > <el-form-item label= "原密码:" prop= "oldPassword" > <el-input v-model= "formPassword.oldPassword" type= "password" maxlength= "16" /> </el-form-item> <el-form-item label= "新密码:" prop= "newPassword" > <el-input v-model= "formPassword.newPassword" type= "password" maxlength= "16" /> </el-form-item> <el-form-item label= "确认密码:" prop= "newPassword2" > <el-input v-model= "formPassword.newPassword2" type= "password" maxlength= "16" /> </el-form-item> <el-form-item label= "密码强度:" prop= "" > <div id= "tips" ><span>低</span><span>中</span> <span>高</span><span>很高</span> </div> </el-form-item> </el-form> <div slot= "footer" class = "dialog-footer" > <el-button @click= "formPasswordCancel()" >取 消</el-button> <el-button type= "primary" @click= "formPasswordUpdate()" >确 定</el-button> </div> </el-dialog> </div> </template> <script> import { update, getInfo, changePassword } from '@/api/account' import waves from '@/directive/waves' // 水波纹指令 import Sticky from '@/components/Sticky' import { checkPassWordStrength } from '@/utils' export default { name: 'SubjectReportDetail' , directives: { waves }, components: { Sticky }, props: { id: { type: Number, default : 0 } }, data() { return { spanDoms: null , passWordStrength: '' , dialogFormVisible: false , loading: false , problemStatusOptions: [], finalResultOptions: [], subjectList: [], subjectNameOptions: [], chargeUserOptions: [], someWord: { changePassword: '修改密码' }, formPassword: { oldPassword: '' , newPassword: '' , newPassword2: '' }, temp: { UserID: undefined, CompanyID: undefined, Position: null , UserName: null , UserStatus: undefined, Password: null , RealName: null , Email: null , Phone: null , TelPhone: null , Address: null , Photo: null , InvestigatorID: undefined }, rules: { Email: [ { required: true , message: '不能为空' }, { type: 'email' , message: '邮箱格式不对' } ], Phone: [ { required: true , message: '不能为空' }, { pattern: /^1[3|4|5|7|8][0-9]{9}$/, message: '请输入11位手机号码' } ] }, formPasswordRules: { oldPassword: [ { required: true , message: '不能为空!' , trigger: 'blur' }, { min: 6, max: 16, message: '请输入6到16字' } ], newPassword: [ { required: true , message: '不能为空!' , trigger: 'blur' }, { min: 6, max: 16, message: '请输入6到16字' } ], newPassword2: [ { required: true , message: '不能为空!' , trigger: 'blur' }, { min: 6, max: 16, message: '请输入6到16字' } ] } } }, computed: { // Props,methods,data和computed的初始化都是在beforeCreated和created之间完成的。 }, watch: { 'formPassword.newPassword' (newValue, oldValue) { this .passWordStrength = checkPassWordStrength(newValue) }, 'passWordStrength' (newValue, oldValue) { // console.log(newValue, oldValue) const index = newValue if (index > 0) { const spanDoms = document.getElementById( 'tips' ).getElementsByTagName( 'span' ) for ( let i = 0; i < spanDoms.length; i++) { spanDoms[i].className = '' // 清空span标签所有的class样式 if (index > 0) { // 0 代表false 其余代表true spanDoms[index - 1].className = 's' + index } } // console.log('spanDoms', spanDoms) } } }, created() { this .initInfo() }, mounted() { this .$nextTick( function () { }) }, methods: { formPasswordCancel() { this .dialogFormVisible = false this .$nextTick(() => { this .$refs[ 'formPassword' ].clearValidate() }) }, submitForm() { this .$refs[ 'dataForm' ].validate((valid) => { if (valid) { update( this .temp).then((response) => { if (response.data) { const mydata = response.data this .temp = mydata this .$notify({ title: '成功' , message: '提交成功' , type: 'success' , duration: 2000 }) } }, error => { this .responseError(error) }) } }) }, formPasswordUpdate() { this .$refs[ 'formPassword' ].validate((valid) => { if (valid) { if ( this .passWordStrength < 2) { this .$notify({ title: '警告' , message: '密码强度低,请加入大小写字母和特殊符号!' , type: 'warning' , duration: 3000 }) return } if ( this .formPassword.newPassword === this .formPassword.newPassword2) { changePassword( this .formPassword.oldPassword, this .formPassword.newPassword).then((response) => { if (response.success) { this .$notify({ title: '成功' , message: '修改成功' , type: 'success' , duration: 2000 }) this .dialogFormVisible = false this .formPassword = { oldPassword: '' , newPassword: '' , newPassword2: '' } } }, error => { this .responseError(error) }) } else { this .$notify({ title: '警告' , message: '新密码与确认密码必须相同!' , type: 'warning' , duration: 5000 }) } } }) }, resetTemp() { this .temp = { UserID: undefined, CompanyID: undefined, Position: null , UserName: null , UserStatus: undefined, Password: null , RealName: null , Email: null , Phone: null , TelPhone: null , Address: null , Photo: null , InvestigatorID: undefined } }, initInfo() { getInfo().then(response => { if (response.data) { this .temp = response.data.user } }, error => { this .responseError(error) }) }, responseError(error) { console.log(error) this .loading = false } } } </script> |
树立目标,保持活力,gogogo!
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具