antd 表单各种验证

        表单中需要很多验证,有时某项不是必须项,但是如果填写的必须遵守某种规则,所以就总结一下,比如手机号不是必须项,但是如果填写了必须遵守正则规则:

 <a-form
        layout="horizontal"
        :form="form"
        :labelCol="{ span: 4 }"
        :wrapperCol="{ span: 18 }"
      >
         <a-row>
          <a-col :md="24" :sm="24">
            <a-form-item label="用户名">
              <a-input  v-decorator="['userName',{rules: [{required: true, message: '请输入用户名'},{validator: validateName}]}]" />
            </a-form-item>
          </a-col>
        </a-row>
         <a-row>
          <a-col :md="24" :sm="24">
              <a-form-item label="密码">
          <a-input  type="password" v-decorator="['password', {rules: [{required: true, message: '请输入密码'},{validator: validateToNextPassword}]}]" />
         
        </a-form-item>
             </a-col>
        </a-row>
         <a-row>
          <a-col :md="24" :sm="24">
             <a-form-item  label="确认密码">
          <a-input  type="password" v-decorator="['ackPassword', {rules: [{required: true, message: '请输入确认密码'},{validator: compareToFirstPassword}]}]" />
        </a-form-item>
             </a-col>
        </a-row>
         <a-row>
          <a-col :md="24" :sm="24">
             <a-form-item label="邮箱">
          <a-input v-decorator="['email', {rules: [{required: false, message: '请输入邮箱'},{validator: validateEmail}]}]" />
        </a-form-item>
             </a-col>
        </a-row>
         <a-row>
          <a-col :md="24" :sm="24">
              <a-form-item label="手机号">
          <a-input v-decorator="['phoneNumber', {rules: [{required: false, message: '请输入手机号'},{validator:validateTelePhone}]}]" />
        </a-form-item>
             </a-col>
        </a-row>
        <a-row>
          <a-col :md="24" :sm="24">
            <a-form-item :wrapperCol="{ offset: 12 }">
              <a-button
              :loading="loading"
              :disabled="disabled"
               size="large"
                @click="submit()"
                type="primary"
              >
                注册
              </a-button>
            </a-form-item>
          </a-col>
        </a-row>
      </a-form>

验证的方法:

 validateName(rule, value, callback){
        const ruleStr1= /^[a-z]{6,}$/  
        if(value && ruleStr1.test(value)){
          checkUser({username:value}).then(res=>{
            const {code,message,data} = res.data
            if(code==200 && !data){
              console.log('checkuser',code)
              callback()
            }else{
              callback('用户名已存在')
            }
          }).catch(()=>{
            callback('用户名已存在')
          })
        }else{
          callback('请输入由至少6位小写字母组成的用户名')
        }
    },
    validateEmail (rule, value, callback) {  
        const form = this.form;  
        const ruleStr= /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
        if(value){ // 有输入
          if (ruleStr.test(value)) {   
            checkEmail({email:value}).then(res=>{
              const {code,message,data} = res.data
              if(code==200 && !data){
                callback()
              }else{
                callback('邮箱已存在')
              }
            }).catch(()=>{
              callback('邮箱已存在')
            })  
          }else{
             callback('请输入正确的邮箱地址'); 
          }
        }else{ // 无输入
          callback()
        }
    },
    validateTelePhone(rule, value, callback){
        const ruleStr2= /^1((34[0-8])|(8\d{2})|(([35][0-35-9]|4[579]|66|7[35678]|9[1389])\d{1}))\d{7}$/
        if(value){ // 有输入
           if(ruleStr2.test(value)){
            checkPhone({phone:value}).then(res=>{
              const {code,message,data} = res.data
              if(code==200 && !data){
                callback()
              }else{
                callback('手机号已存在')
              }
            }).catch(()=>{
              callback('手机号已存在')
            })  
          }else{
            callback('请输入正确的手机号')
          }
        }else{ // 无输入
          callback()
        }
    },
     validateToNextPassword  (rule, value, callback) {  
        const form = this.form;  
        const ruleStr= /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~])[a-zA-Z0-9!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]{8,}$/
       console.log(ruleStr.test('Admin!@#456'))
        if (value && ruleStr.test(value)) {  
            form.validateFields(['ackPassword'], { force:true });  
            callback();  
        }else{
          callback('密码必须由字母、数字、特殊符号组成,长度为6-18个字符');  
        }  
    },
     compareToFirstPassword  (rule, value, callback) {  
        const form = this.form;  
        if (value && value !== form.getFieldValue('password')) {  
          callback('两次密码需要一样');  
        }else{  
          callback();
        } 
    },  

antd 中,可以通过调用表单组件的 validateFields 方法来触发表单验证。具体的步骤如下: 1. 在表单组件中引入 Form 组件和 useForm 方法: ```javascript import { Form } from 'antd'; import { useForm } from 'antd/lib/form/Form'; ``` 2. 使用 useForm 方法来获取表单实例和表单验证方法: ```javascript const [form] = Form.useForm(); const { validateFields } = form; ``` 3. 在需要触发验证的时机调用 validateFields 方法: ```javascript const handleFormSubmit = () => { validateFields() .then((values) => { // 验证成功,执行提交操作 console.log(values); }) .catch((errorInfo) => { // 验证失败,处理错误信息 console.log(errorInfo); }); }; ``` 在上述代码中,handleFormSubmit 方法用于处理表单提交操作。当调用 validateFields 方法时,会返回一个 Promise 对象,通过 then 方法可以获取到验证成功后的表单值,通过 catch 方法可以处理验证失败时的错误信息。 需要注意的是,在表单组件中,每个需要验证的字段都应该通过 name 属性进行命名,例如: ```javascript <Form form={form}> <Form.Item name="username" label="用户名" rules={[{ required: true, message: '请输入用户名' }]}> <Input /> </Form.Item> {/* 其他表单项 */} <Button onClick={handleFormSubmit}>提交</Button> </Form> ``` 以上是使用 antd 中的 Form 组件来触发表单验证的方法。希望能帮到你!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值