基于vue3的京东nutui组件库的表单校验规则:怎样进行表单验证?怎样只使用指定的某一个规则进行校验呢?

官网:

NutUI - 移动端 Vue2、Vue3、小程序 组件库京东风格的轻量级移动端 Vue、React 组件库https://nutui.jd.com/#/component/form

用法:

(详细的代码在下面,这里先只说主要的使用方法)

全部校验:

如果.validate()里的参数是空,则默认校验全部规则

ruleForm.value.validate().then(async ({ valid, errors }: any) => {}

单独校验:

如果想单独使用某一个规则的话。就在.validate()里面加上要验证的那个prop参数即可:比如只想校验手机号码的话:

ruleForm.value.validate(formData.phone).then(async ({ valid, errors }: any) => {}

关键代码:

<template>
  <div class="login">
    <nut-form ref="ruleForm" :model-value="formData">
      <nut-form-item
        required
        prop="phone"
        :rules="[
          { required: true, message: '请输入手机号码' },
          { validator: validatePhone, message: '请输入正确的手机号' },
        ]"
      >
        <nut-input v-model="formData.phone" class="nut-input-text" placeholder="请输入手机号码" type="tel" />
      </nut-form-item>
      <nut-form-item
        required
        prop="verificationCode"
        :rules="[
          { required: true, message: '请输入短信验证码' },
          { validator: validatePhoneMsg, message: '请输入正确的短信验证码' },
        ]"
      >
        <nut-input v-model="formData.verificationCode" class="nut-input-text verification-code-input fl" placeholder="请输入短信验证码" type="password" />
        <nut-button class="verification-code-btn fr" size="small" type="info" @click="handleGetCheckCode" :disabled="!checkCodeBtnCanClick">
          {{ pageData.btnTimes ? pageData.btnTimes + 'S' : '发送验证码' }}
        </nut-button>
      </nut-form-item>
      <nut-button block type="info" class="login-btn" @click="submit"> 登录/注册 </nut-button>
    </nut-form>
  </div>
</template>

<script lang="ts" setup>
  import router from '/@/router';
  import { computed, reactive, ref } from 'vue';
  import { useUserStore } from '/@/store/modules/user';
  import { login, test, sendMsg } from '/@/api';
  import { Toast } from 'vant';
  });
  const formData = reactive({
    phone: '',
    verificationCode: '', // 短信验证码
  });
  const ruleForm = ref<any>(null);
  const submit = () => {
    ruleForm.value.validate().then(async ({ valid, errors }: any) => {
      if (valid) {
       
      } else {
        console.log('error submit!!', errors);
      }
    });
  };
  const handleGetCheckCode = () => {
    ruleForm.value.validate(formData.phone).then(async ({ valid, errors }: any) => {
      if (valid) {
  
      } else {
        console.log('error!!', errors);
      }
    });
  };

  // 函数校验
  // 验证手机号
  const validatePhone = (value: any) => {
    if (!value || !value.trim()) {
      Toast.fail(new Error('请输入手机号码'));
    } else {
      const reg = /^1[0-9]\d{9}$/;
      if (reg.test(value)) {
        return true;
      } else {
        Toast.fail(new Error('请输入正确的手机号'));
      }
    }
  };
  // 自定义短信验证码验证方法
  const validatePhoneMsg = (value: any) => {
    console.log('自定义短信验证码验证方法', value);
    if (!value || !value.trim()) {
      Toast.fail(new Error('请输入短信验证码'));
    } else {
      const reg = /^[0-9]{6}$/;
      if (reg.test(value)) {
        return true;
      } else {
        Toast.fail(new Error('请输入正确的短信验证码'));
      }
    }
  };
</script>

以文档的这个例子来改写:

官网的代码可以运行:

在线代码开发平台https://codehouse.jd.com/?source=share&type=vue&mainJs=Ly9pbXBvcnQgVkNvbnNvbGUgZnJvbSAidmPGDyI7Ci8vdmFyIHbIID0gbmV3yS8oKTsKx0J7IGNyZWF0ZUFwcCB9yEd1xELHIcQZxhcuL2FwcC7NHU51dFVJxx9AbnV0dWkvxQbKIsc2c2Nzc8sVzCwvZGlzdC9zdHlsZS7GJukAkihBcHApLnVzZSjFaSkubW91bnQoIiNhcHAiKTs=&appValue=PHRlbXBsYXRlPgo8bnV0LWZvcm0gOm1vZGVsLXZhbHVlPSLEE0RhdGEiIHJlZj0icnVsZUZvcm0iPgogIMk0LWl0ZW0gbGFiZWw9IuWnk+WQjSIgcHJvcD0ibmFtZcQ8cXVpcmVkIDrEQXM9Ilt7yRQ6IHRydWUsIG1lc3NhZ2U6ICfor7floavlhpnGSycgfV3FcCAgPGlucHV0IGNsYXNzPSLEf8URLXRleHQiIEBibHVyPSJjdXN0b21CbHVyVmFsaWRhdGUoJ+QAhycpIiB2LeUA3uoA2C7EGiLFXSAgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeYAhu+8jMRfIOS6i+S7tuagoemqjCIgdHlwZT0ixn8v5QEUL+0BFfsBJ7m06b6E6AEnYWf1ASbnAJj/AS3nAS3FUScgfSzJNnbmAQBvcjog5gEV5wERb3LMQuW/hemhu+YA7OaVsOWtl81FcmVnZXg6IC9eKFxkezEsMn18MVxkezJ9fDIwMCkkL9hKMC0yMDDljLrpl7QnIH3FTv8BxucBxvIBo+UBHfcBnOUA9e+8jMZ75gC/5LiUy37/AaX9AaXogZTns7vnlLXor53oAat0ZWz/Aav/AauGmcxX+AGxYXN5bmP1AbDGOOagvOW8j+S4jeato+ehrv8BZP8BZGEu5QDW9gFk7ACu5AFqvILmraXmAwHsAIv/AWj+Aw2csOWdgOkDDWRkcmVzc/8EN/sDCsVO/wQ3/QJx6ACB9wJ1xWD/APDsAPBjZWxs5wCKxA9idXR0b27HP3ByaW1hcnkiIHNpemU9InNtYWxsIiBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAxMHB4IiBAY2xpY2s9InN1Ym1pdCI+5o+Q5LqkxnvGWtJrzVzIQXJlc2V0Ij7ph43nva7mj5DnpLrnirbmgIHQTMYQ5gDF6gDjxAzrBkBzY3JpcHQgbGFuZz0idHMiPgppbXBvcnTlAxJmLHJlYWN0aXZlIH0gZnJvbSAndnVlJzsKZXjFJGRlZmF1bHQgewpzZXR1cCgpe+UAw2NvbnN0IOgBlyA9IMhGKMYgxAHkBcA6ICcn6ANFICDmAg7LEXRlbM8i5gHgxBXFFH0pO8tw5wOFZSA9ICjkAcc6IGFueSkgPT4gynbEKm9sZS5sb2fFJMdBfcxI6Acs5QC4Zjxhbnk+KG51bGwpOwrLJuYBx8RszWPIPS7lB4jEBuYGyikudGhlbigo5wQsLCBlcnJvcnMgffQApmlmICjFJynLFe4AvSdzdWNjZXNzJyzpAWjnAMzEAX0gZWxzZdo9xX3nAMMhISfoAI7MQscK6AFj7gEi5AKC/wD7LsUlKM4/Ly8g5aSx5Y6754Sm54K55gSNy1nyCAPEZuQEXjogc3RyaW5n3HLpAW3EMf8Bcf8Bcf8Bcf8Bcf8Bcf8BcfEBMoe95pWw9wEs6QZq5AEpdmFs7QEoL15cZCskLy50ZXN0xB3HWy8vIFByb21pc2Ug7AYVy1zuBsXUW+kBg2V0dXJuIG5ld8hUKChyZXNvbHZlzSggIFRvYXN0LmxvYWRpbmcoJ+aooeaLn+YAgOmqjOivgeS4rS4uLifrARRzZXRUaW1lb3V0KO4Ca8pQaGlkZegCZcYBx34oL140MDAoLT8pWzAtOV17N30kfF7kCQIxMMQKMMYWMiwzfS3HISw4fewBLMtVfSwgMTAwMMkS7wGk5wEEe+kCkOoCIyzpBJYs8gnL8Agr8gL+LOcCMyznA3N9Owp9Cn0KPC/mBbY+Cg==&scssValue=

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
要在 Vue 3 中使用 Ant Design VueForm 表单组件进行确认密码校验,你可以自定义校验规则来实现。下面是一个示例: ```vue <template> <a-form ref="form" :model="formData"> <a-form-item label="密码" name="password" rules="required"> <a-input type="password" v-model="formData.password" /> </a-form-item> <a-form-item label="确认密码" name="confirmPassword" rules="required,checkPassword"> <a-input type="password" v-model="formData.confirmPassword" /> </a-form-item> <a-form-item> <a-button type="primary" @click="submitForm">提交</a-button> </a-form-item> </a-form> </template> <script> import { ref } from 'vue'; import { Form, Input, Button, message } from 'ant-design-vue'; export default { components: { 'a-form': Form, 'a-form-item': Form.Item, 'a-input': Input, 'a-button': Button }, setup() { const formRef = ref(null); const formData = ref({ password: '', confirmPassword: '' }); const checkPassword = (_, value) => { if (value !== formData.password) { return Promise.reject(new Error('两次密码输入不一致')); } return Promise.resolve(); }; const submitForm = () => { formRef.value.validate((valid) => { if (valid) { // 验证通过,执行表单提交操作 console.log('表单验证通过'); // ... } else { console.log('表单验证失败'); } }); }; return { formRef, formData, checkPassword, submitForm }; } }; </script> ``` 在上述示例中,我们在确认密码字段的 `a-form-item` 组件上定义了一个名为 `checkPassword` 的校验规则。该规则使用一个自定义校验函数,并在函数内部判断确认密码是否与密码字段的值相同。如果不相同,我们使用 `Promise.reject` 返回一个错误信息,表示校验失败;如果相同,我们使用 `Promise.resolve` 表示校验通过。 然后,我们将这个校验规则 `checkPassword` 应用到确认密码字段的 `rules` 属性中,通过逗号分隔多个规则。注意,我们还将 "required" 规则也应用到了确认密码字段上,以确保确认密码不能为空。 在 `submitForm` 方法中,我们使用 `formRef.value.validate` 方法来进行表单验证,当验证完成后执行回调函数。你可以在回调函数中处理验证通过和验证失败的情况。 希望以上信息对你有帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南北极之间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值