uview 表单验证完整版

 

<view class="apply-form">
			<u--form :model="personnelInfo" ref="formInfo" :border-bottom="false" label-width="10px">
				<u-form-item  label-position="top"  prop="store"  ref="store" class="custom-form"
					>
					<view class="dis-flex">
						<i  class="custom-icon custom-icon-shop"></i><text class="lab"> 门店</text> 
					</view>  
					<u--input  fontSize="30rpx"  v-model="personnelInfo.store" :customStyle="customInputStyle"
						placeholder="请输入门店"  disabled disabledColor="#ffffff">
					</u--input>
				</u-form-item>
				<u-form-item  label-position="top"  prop="userName"  ref="userName"  class="custom-form"
					>
					<view class="dis-flex">
						<i class="custom-icon custom-icon-user"></i><text class="lab"> 姓名</text> 
					</view>  
					<u--input  fontSize="30rpx" v-model="personnelInfo.userName" :customStyle="customInputStyle"
						placeholder="请输入姓名(必填)" clearable  maxlength="5">
					</u--input>
				</u-form-item>
		
				<u-form-item  label-position="top" prop="idCard"  ref="idCard"  class="custom-form"
					>
					<view class="dis-flex">
						<i  class="custom-icon custom-icon-idcard"></i><text class="lab"> 身份证号</text> 
					</view>  
					<u--input fontSize="30rpx"   v-model="personnelInfo.idCard" :customStyle="customInputStyle"
						placeholder="请输入身份证号码(必填)" clearable type="idcard"  maxlength="18" >
					</u--input>
				</u-form-item>
				<u-form-item  label-position="top" prop="phoneNumber"  ref="phoneNumber"  class="custom-form"
					>
					<view class="dis-flex">
						<i  class="custom-icon custom-icon-phone"></i><text class="lab"> 手机号</text> 
					</view>  
					<u--input  v-model="personnelInfo.phoneNumber" fontSize="30rpx" 
						placeholder="请输入手机号(必填)" type="number" clearable  maxlength="11" :customStyle="customInputStyle">
					</u--input> 
				</u-form-item>
				
				<u-form-item  label-position="top"  prop="province" ref="province"  class="custom-form" @click="pickShowHandle"
					>
					<view class="dis-flex">
						<i  class="custom-icon custom-icon-sheng"></i><text class="lab"> 所在省份</text> 
					</view>  
					<u--input  fontSize="30rpx" v-model="personnelInfo.province" suffixIcon="arrow-down-fill" :suffixIconStyle="suffixIconStyle"
						placeholder="请选择所在省份(必填)" disabled disabledColor="#ffffff" :customStyle="customInputStyle" >
					</u--input>
					
					 
				</u-form-item>
				<u-form-item  label-position="top"  prop="address"  ref="address" class="custom-form"
					>
					<view class="dis-flex">
						<i  class="custom-icon custom-icon-adress"></i><text class="lab"> 详细地址</text> 
					</view> 
					<u--input fontSize="30rpx"  height="100px" v-model="personnelInfo.address" :customStyle="customInputStyle"
						placeholder="请输入详细地址(必填)"  clearable >
					</u--input>
				</u-form-item>
			</u--form>
			
			<view class="bottom">
				<u-button type="primary" :disabled="loading" @click="submit" throttle-time="2000" v-loading="loading">
					提交{{loading?"中...":""}}
				</u-button>
			</view>
			
	    		<u-picker ref="uPicker" title="选择省份" :show="pickShow" :columns="provincesArr" @confirm="confirm"
			 @cancel="close"></u-picker>
		</view>
export default {

    data(){
			return {
				personnelInfo:{
					store:"",
					userName:"",
					phoneNumber:" ",
					idCard:" ",
					province:" ",
					address:" ",
					laborServiceCompany:"",
					type:0,
				},
                loading:false,
				provincesArr:[],
				rules: {
				        store: [
				          { required: true, message: "门店名称不能为空", trigger: "blur" }
				        ],
				        userName: [
				         {
				            message: "请输入正确的姓名",
				            trigger: "blur",
							validator: (rule, value, callback) => {
							  return RegExp(
								/^[\u4e00-\u9fa5]{1,4}$/
							  ).test(value)
							},
				          },
				          { required: true, message: "用户名不能为空", trigger: "blur" }
				        ],
				        phoneNumber: [
							  {
								validator: (rule, value, callback) => {
									if (value) {
										return this.$u.test.mobile(value);
									} else {
										return true
									}
								},
								message: "手机号格式不正确",
								trigger: "blur"
							},
							{ required: true, message: "手机号码不能为空", trigger: "blur" }
				        ],
				        idCard: [
				           {
							 validator: (rule, value, callback) => {
									return RegExp(
										/^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}([0-9]|X)$/i
									).test(value)
								},
				            message: "请输入正确的身份证号码",
				            trigger: "blur"
				          },
				          { required: true, message: "身份证不能为空", trigger: "blur" }
				        ],
				        address: [
				          { required: true, message: "地址不能为空", trigger: "blur" }
				        ],
						province: [
						  { required: true, message: "省份不能为空", trigger: "change" }
						],
						laborServiceCompany: [
						  { required: true, message: "劳务公司不能为空", trigger: "change" }
						],
						type: [
						  { required: true, message: "类型不能为空", trigger: "change" }
						]
				      },
			}
		},


      // 这一步很重要
      onReady() {
			this.$refs.formInfo.setRules(this.rules);
	  },

      medths:{
        
            submit(){
				console.log(this.$refs.formInfo.validate);
				this.loading = true
				this.$refs.formInfo.validate().then(valid => {
					if (valid) {
						console.log('校验成功!')
					} else {
						console.log('校验失败!')
					}
				});
			},

    }



}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uview form组件提供了一些验证的方法,可以在组件上设置验证规则。 1. 设置验证规则 在form组件上设置rules属性,rules属性是一个数组,数组中每个对象示一个项的验证规则。例如: ``` <template> <u-form :rules="rules"> <u-form-item label="姓名" prop="name"> <u-input v-model="form.name"></u-input> </u-form-item> <u-form-item label="年龄" prop="age"> <u-input v-model="form.age"></u-input> </u-form-item> </u-form> </template> <script> export default { data() { return { form: { name: '', age: '' }, rules: [ { prop: 'name', required: true, message: '请输入姓名' }, { prop: 'age', required: true, message: '请输入年龄' } ] } } } </script> ``` 上面代码中,设置了两个项的验证规则,分别是必填项验证。 2. 触发验证 在form组件上设置ref属性,可以通过ref属性获取form组件实例,然后调用实例的validate方法触发验证。 ``` <template> <u-form :rules="rules" ref="form"> <u-form-item label="姓名" prop="name"> <u-input v-model="form.name"></u-input> </u-form-item> <u-form-item label="年龄" prop="age"> <u-input v-model="form.age"></u-input> </u-form-item> <u-button type="primary" @click="submit">提交</u-button> </u-form> </template> <script> export default { data() { return { form: { name: '', age: '' }, rules: [ { prop: 'name', required: true, message: '请输入姓名' }, { prop: 'age', required: true, message: '请输入年龄' } ] } }, methods: { submit() { this.$refs.form.validate((valid) => { if (valid) { // 验证通过,执行提交操作 } else { // 验证未通过,提示错误信息 } }) } } } </script> ``` 上面代码中,点击“提交”按钮时,调用submit方法,通过this.$refs.form.validate方法触发验证验证通过后执行提交操作,验证未通过则提示错误信息。 3. 定制验证规则 除了设置默认的验证规则,也可以在项上设置自定义的验证规则。 ``` <template> <u-form :rules="rules" ref="form"> <u-form-item label="姓名" prop="name"> <u-input v-model="form.name"></u-input> </u-form-item> <u-form-item label="年龄" prop="age"> <u-input v-model="form.age"></u-input> </u-form-item> <u-button type="primary" @click="submit">提交</u-button> </u-form> </template> <script> export default { data() { return { form: { name: '', age: '' }, rules: [ { prop: 'name', validator: (rule, value, callback) => { if (!value || value.length < 2) { callback(new Error('姓名长度不能少于2个字符')) } else { callback() } } }, { prop: 'age', required: true, message: '请输入年龄' } ] } }, methods: { submit() { this.$refs.form.validate((valid) => { if (valid) { // 验证通过,执行提交操作 } else { // 验证未通过,提示错误信息 } }) } } } </script> ``` 上面代码中,自定义了姓名项的验证规则,如果输入的姓名长度少于2个字符,会提示“姓名长度不能少于2个字符”的错误信息。自定义的验证规则需要在validator属性中设置,validator属性是一个函数,函数接收3个参数:验证规则对象、项的值、回调函数。当验证规则不符合时,调用回调函数并传入错误信息,否则不传入任何参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值