首页 > 编程语言 >uni-app项目uview的表单验证在小程序上不生效

uni-app项目uview的表单验证在小程序上不生效

时间:2024-06-07 20:21:48浏览次数:29  
标签:__ 32rpx form 验证 rules app uview uni

前情

uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app,在uniapp生态中uView是其中非常好的全平台的第三方开源ui库,我在公司项目中果断的使用了它。

坑位

在用uView做小程序表单验证的时候,对于普通的验证是没有问题,如果要用到正则或者自定义验证方法,发现在小程序不生效。

Why?

是自己大意了没有闪,没细看官方文挡,官方文挡在Form表单文挡最开头就强调了,微信小程序要特殊处理,对于使用正则也是不行,有可能是用了正则就是走的自定义验证方法了吧。

官方文挡

解决方案

在小程序中,使用uView的表单验证如果你使用了正则验证或者自定义验证方法验证,那就不能通过:rules给form组件传验证规则,只能通过setRules(rules)手动指定form的验证规则才行。

不需要手动指定验证规则:

<template>
	<view class="page-container">
		<u-form
			:model="form"
			:rules="rules"
			ref="addressForm"
		>
			<view class="form-wrap">
				<u-form-item
						label="姓名:"
						required
						labelWidth="auto"
						borderBottom
						prop="name"
				>
					<u--input
							v-model="form.name"
							inputAlign="right"
							placeholder="请输入"
							border="none"
							type="number"
					></u--input>
				</u-form-item>
				<u-form-item
						label="手机号码:"
						required
						labelWidth="auto"
						borderBottom
						prop="phone"
				>
					<u--input
							v-model="form.phone"
							inputAlign="right"
							placeholder="请输入"
							border="none"
							type="number"
					></u--input>
				</u-form-item>
			</view>
		</u-form>
		<button @click="submit">提交</button>
	</view>
</template>

<script>
	
	export default {
		data() {
			return {
				form: {
					name: '',
					phone: '',
				},
				rules: {
					name: [
						{
							required: true,
							message: '请输入联系人姓名',
							trigger: ['blur', 'change']
						}
					],
					phone: [
						{
							required: true,
							message: '请输入手机号码',
							trigger: ['blur', 'change']
						}
					]
				}
			}
		},
		methods: {
			submit() {
				this.$refs.addressForm.validate().then(res => {
					uni.$u.toast('校验通过');
				}).catch(errors => {
					uni.$u.toast('校验失败');
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
	.form-wrap{
		padding:0 32rpx 40rpx 32rpx;
		::v-deep{
			.u-form-item__body__left__content__label{
				font-size: 32rpx!important;
				color: #111111;
			}
			.u-form-item__body{
				padding: 32rpx 0;
			}
			.input-placeholder{
				text-align: right;
			}
			.u-input__content__field-wrapper{
				margin-right: 4px;
			}
		}
	}
</style>

需要手动指定验证规则,因为姓名使用了pattern/手机又使用了自定义的验证方法:

<template>
	<view class="page-container">
		<u-form
			:model="form"
			ref="addressForm"
		>
			<view class="form-wrap">
				<u-form-item
						label="姓名:"
						required
						labelWidth="auto"
						borderBottom
						prop="name"
				>
					<u--input
							v-model="form.name"
							inputAlign="right"
							placeholder="请输入"
							border="none"
							type="number"
					></u--input>
				</u-form-item>
				<u-form-item
						label="手机号码:"
						required
						labelWidth="auto"
						borderBottom
						prop="phone"
				>
					<u--input
							v-model="form.phone"
							inputAlign="right"
							placeholder="请输入"
							border="none"
							type="number"
					></u--input>
				</u-form-item>
			</view>
		</u-form>
		<button @click="submit">提交</button>
	</view>
</template>

<script>
	
	export default {
		data() {
			return {
				form: {
					name: '',
					phone: '',
				},
				rules: {
					name: [
						{
							required: true,
							message: '请输入联系人姓名',
							trigger: ['blur', 'change']
						},
						// 正则判断为字母或数字
						{
							pattern: /^[\u4e00-\u9fa5]+$/g,
							// 正则检验前先将值转为字符串
							transform(value) {
								return String(value);
							},
							message: '只能包含字母或数字'
						},
					],
					phone: [
						{
							required: true,
							message: '请输入手机号码',
							trigger: ['blur', 'change']
						}, {
							validator: (rule, value, callback) => {
								return uni.$u.test.mobile(value);
							},
							// pattern: /^1\d{10}$/,
							message: '请输入正确的手机号',
							trigger: ['blur', 'change']
						}
					]
				}
			}
		},
		mounted() {
			// 手动提定rules
			this.$refs.addressForm.setRules(this.rules);
		},
		methods: {
			submit() {
				this.$refs.addressForm.validate().then(res => {
					uni.$u.toast('校验通过');
				}).catch(errors => {
					uni.$u.toast('校验失败');
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
	.form-wrap{
		padding:0 32rpx 40rpx 32rpx;
		::v-deep{
			.u-form-item__body__left__content__label{
				font-size: 32rpx!important;
				color: #111111;
			}
			.u-form-item__body{
				padding: 32rpx 0;
			}
			.input-placeholder{
				text-align: right;
			}
			.u-input__content__field-wrapper{
				margin-right: 4px;
			}
		}
	}
</style>

标签:__,32rpx,form,验证,rules,app,uview,uni
From: https://www.cnblogs.com/xwwin/p/18237815

相关文章

  • Android设置app开机自启
    Android7.1.1开机自动启动配置在AndroidManifest.xml文件中添加权限<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>在AndroidManifest.xml文件中注册接收广播配置,添加到manifest>application节点下<receiverandroid:name=".MyReceive......
  • Unity反射的几种方式
    1.利用额外的相机将反射的内容渲染到RenderTargetTexture上 参考:<Unity入门精要>10.2.1节原理很简单,以反射面(例如镜子)为中心,创建一个相机,处于主相机在镜子中反射的位置,用脚本实时更改相机位置与朝向这个相机渲染的内容不直接输出到屏幕,而是输出到一张RTT上然后再将......
  • Unity 协程
    IEnumeratorStart(){Debug.Log("协程开始");yieldreturnnewWaitForSeconds(2f);Debug.Log("等待了2秒后继续执行");yieldreturnnewWaitForSeconds(1f);Debug.Log("又等待了1秒后继续执行");}......
  • Visual Instruction Tuning论文阅读笔记
    Motivation&AbsMotivation:之前基于LLM的通用助手仅能处理文本。数据:使用纯语言的GPT4生成多模态语言-图像指令数据。模型:基于生成数据端到端训练的模型LLaVA,用于通用视觉语言理解。指标:两个benchmark。GPT-assistedVisualInstructionDataGeneration现有的多模态指令数......
  • uniapp零基础到项目实战( 附送250套精选项目源码),全网最全保姆式教程
    今天开始带着大家一起零基础学习uniapp,在下面的课程中我们就简称uniapp为uni吧。我这里从零基础开始教大家,后面可以带大家简单的做一个实战项目。所以不用担心自己没有基础,跟着认真学习就行了的。一,认识uniapp1-1,uniapp的好处我们学习uniapp之前先要认识uniapp的好处看下......
  • 重复运行同一个 junit 测试的简便方法?
    正如标题所说,我正在寻找一些简单的方法,以便使用Eclipse自动连续多次运行JUnit4.x测试。一个例子是连续运行10次相同的测试并报告结果。我们已经有了一种复杂的方法,但我仍在寻找一种简单的方法,以便我可以确定我一直在尝试修复的不稳定测试将保持不变。......
  • @firebase/app-check: FirebaseError: AppCheck: ReCAPTCHA 错误
    我在我的javascript网络应用程序中实施了AppCheckreCAPTCHAEnterprise流程。我遵循了文档中提到的所有步骤。在Firebase控制台中启用AppCheck,注册Web应用程序,并在GCP控制台中启用reCAPTCHAEnterpriseAPI。创建网站密钥,并在Firebase应用程序检查控制台中添加该......
  • BERT+P-Tuning文本分类模型
    基于BERT+P-Tuning方式文本分类模型搭建模型搭建本项目中完成BERT+P-Tuning模型搭建、训练及应用的步骤如下(注意:因为本项目中使用的是BERT预训练模型,所以直接加载即可,无需重复搭建模型架构):一、实现模型工具类函数二、实现模型训练函数,验证函数三、实现模型预测函......
  • APP渗透中xposed框架安装及模块安装
    在做APP渗透的时候xposed框架的使用必不可少,工具包在结尾。第一步,下载一个雷电模拟器3版本的(工具包里已经提供),不同版本的对应的xposed可能不同,我这里以我自己安装的为例安装完模拟器后,点击启动模拟器,确认是否开了root权限的将xposed软件拖进模拟器中他会自动安装自动安......
  • 《维汉翻译通》App的维吾尔文OCR文字识别技术真厉害,准确率高、操作简单、支持识别文档
    《维汉翻译通》App的拍照识别文字功能(OCR)拥有以下优势,确保了高准确率的识别体验:先进的OCR技术:应用了最新的光学字符识别技术,能够准确识别各种字体和大小的文本。支持多种语言:特别针对维吾尔语和汉语进行了优化,确保两种语言的文本都能被快速准确地识别。智能图像处理:在识别......