【Vue】element UI注册手机号+验证码校验+表单验证

[复制链接]
发表于 2025-10-2 15:30:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#提供了一些前端代码和后端的Vuex store实现#
场景:Vue.js和Nuxt.js、element ui。在这个空的登录注册页实现注册登录校验



添加表单校验

在原有代码底子上,<el-form-item>加上prop属性,属性名称对应
  1. export default {   
  2. data(){   
  3.         return {
  4.                 rules:{ mobile,smsCode}
  5.                }
  6.       }
  7. }
复制代码
发送验证码方法调用的时间可以先辈行手机号验证。这里在后端哀求之后,也可以后端同时举行二次验证确保数据安全。
  1. <template>
  2.   <div class="com-form-login">
  3.     <!-- ...原有代码... -->
  4.     <el-form
  5.       label-position="top"
  6.       label-width="80px"
  7.       :model="loginParams"
  8.       :rules="rules"
  9.       ref="loginForm"  <!-- 新增ref -->
  10.     >
  11.       <el-form-item prop="mobile">  <!-- 添加prop -->
  12.         <el-input v-model="loginParams.mobile" placeholder="请输入手机号"></el-input>
  13.       </el-form-item>
  14.       <el-form-item prop="smsCode">  <!-- 添加prop -->
  15.         <span v-if="isLoading">发送中...</span>
  16.         <el-input v-model="loginParams.smsCode" placeholder="请输入短信验证码"></el-input>
  17.         <!-- ...原有按钮代码... -->
  18.       </el-form-item>
  19.       <!-- ...其他代码... -->
  20.     </el-form>
  21.   </div>
  22. </template>
  23. <script>
  24. export default {
  25.   data() {
  26.     // 手机号验证规则
  27.     const validateMobile = (rule, value, callback) => {
  28.       if (!value) {
  29.         return callback(new Error('手机号不能为空'));
  30.       }
  31.       if (!/^1[3-9]\d{9}$/.test(value)) {
  32.         return callback(new Error('请输入有效的手机号码'));
  33.       }
  34.       callback();
  35.     };
  36.     // 验证码规则
  37.     const validateSmsCode = (rule, value, callback) => {
  38.       if (!value) {
  39.         return callback(new Error('验证码不能为空'));
  40.       }
  41.       if (!/^\d{6}$/.test(value)) {
  42.         return callback(new Error('验证码必须是6位数字'));
  43.       }
  44.       callback();
  45.     };
  46.     return {
  47.       // 新增校验规则
  48.       rules: {
  49.         mobile: [
  50.           { required: true, validator: validateMobile, trigger: 'blur' }
  51.         ],
  52.         smsCode: [
  53.           { required: true, validator: validateSmsCode, trigger: 'blur' }
  54.         ]
  55.       },
  56.       // ...其他原有data...
  57.     }
  58.   },
  59.   methods: {
  60.     async sendCode() {
  61.       // 先验证手机号格式
  62.       try {
  63.         await this.$refs.loginForm.validateField('mobile');
  64.         this.isLoading = true;
  65.         const res = await sendCode({
  66.           mobile: this.loginParams.mobile
  67.         });
  68.         if (res.status === 200) {
  69.           this.startCountdown();
  70.         } else {
  71.           this.$message.error(res.data?.error || '验证码发送失败');
  72.         }
  73.       } catch (error) {
  74.         // 验证失败会自动显示错误信息
  75.       } finally {
  76.         this.isLoading = false;
  77.       }
  78.     },
  79.     async execLogin() {
  80.       try {
  81.         // 验证整个表单
  82.         const valid = await this.$refs.loginForm.validate();
  83.         if (!valid) return;
  84.         
  85.         this.loading = true;
  86.         const res = await this.login(this.loginParams);
  87.         if (res.status === 200) {
  88.           this.$message.success('登录成功');
  89.           // ...原有跳转逻辑...
  90.         }
  91.       } catch (error) {
  92.         // 错误处理由element自动处理
  93.       } finally {
  94.         this.loading = false;
  95.       }
  96.     }
  97.   }
  98. }
  99. </script>
复制代码
实现结果


  • 手机号输入时会实时验证格式
  • 点击发送验证码时会先验证手机号格式
  • 提交时会验证全部字段
  • 验证不通过期主动体现错误提示
     如果有须要也可以写上5-10分钟的验证码有用期,同时在前端这里加上一个倒计时计时器,当发送验证码开始倒计时。
参考资料:
1.Vue+elementUI el-input输入框手机号校验_elementui验证手机号-CSDN博客

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表